From adfba0402927438a1869f1e716bcf0e25574ce1e Mon Sep 17 00:00:00 2001 From: john Date: Fri, 23 Nov 2007 13:53:25 -0700 Subject: [PATCH] Update to upstream version 0.97.7 --- TODO | 2 +- configure | 20 +-- configure.ac | 2 +- libs/Music/Music.cpp | 43 ++++++ libs/Music/Music.h | 295 +++++++++++++++++++++++++------------ src/CustomInstrumentTunerForm.cpp | 26 +++- src/DummyMonoQuantizer.cpp | 2 +- src/LatencyMonoQuantizer.cpp | 4 +- src/modules/DialView.cpp | 2 +- src/modules/MicrotonalView.cpp | 2 +- ui/ConfigForm.ui | 68 ++++++++- ui/InstrumentTunerForm.ui | 20 ++- 12 files changed, 364 insertions(+), 122 deletions(-) diff --git a/TODO b/TODO index 2cf53df..6e673f6 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,7 @@ look for translations volume à partir de la somme des harmoniques pas de la valeur max - perceptive volume from weighted spectrum ? + perceptive volume from weighted spectrum ? loudness ? de Bark ? high pass with FIR band pass ranges with low pass tests corrects des working transport possibles diff --git a/configure b/configure index ac51f3a..d3f4e3e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for fmit 0.97.6. +# Generated by GNU Autoconf 2.59 for fmit 0.97.7. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation @@ -267,8 +267,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='fmit' PACKAGE_TARNAME='fmit' -PACKAGE_VERSION='0.97.6' -PACKAGE_STRING='fmit 0.97.6' +PACKAGE_VERSION='0.97.7' +PACKAGE_STRING='fmit 0.97.7' PACKAGE_BUGREPORT='' ac_default_prefix=/usr/local/ @@ -791,7 +791,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures fmit 0.97.6 to adapt to many kinds of systems. +\`configure' configures fmit 0.97.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -857,7 +857,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of fmit 0.97.6:";; + short | recursive ) echo "Configuration of fmit 0.97.7:";; esac cat <<\_ACEOF @@ -1004,7 +1004,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -fmit configure 0.97.6 +fmit configure 0.97.7 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1018,7 +1018,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by fmit $as_me 0.97.6, which was +It was created by fmit $as_me 0.97.7, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1664,7 +1664,7 @@ fi # Define the identity of the package. PACKAGE='fmit' - VERSION='0.97.6' + VERSION='0.97.7' # Some tools Automake needs. @@ -9900,7 +9900,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by fmit $as_me 0.97.6, which was +This file was extended by fmit $as_me 0.97.7, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9963,7 +9963,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -fmit config.status 0.97.6 +fmit config.status 0.97.7 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.ac b/configure.ac index aedbf1d..703b1bb 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT(fmit, 0.97.6) +AC_INIT(fmit, 0.97.7) AM_CONFIG_HEADER(config.h) AC_PREFIX_DEFAULT(/usr/local/) AM_INIT_AUTOMAKE([no-define dist-bzip2]) diff --git a/libs/Music/Music.cpp b/libs/Music/Music.cpp index 71847cd..03db216 100644 --- a/libs/Music/Music.cpp +++ b/libs/Music/Music.cpp @@ -24,7 +24,15 @@ using namespace std; Music::NotesName Music::s_notes_name = Music::LOCAL_ANGLO; + int Music::s_tonality = 0; +double Music::s_semitones[13] = { 1.0000, 1.0595, 1.1225, 1.1892, 1.2599, 1.3348, 1.4142, 1.4983, 1.5874, 1.6818, 1.7818, 1.8877, 2.0000 }; // Chromatic, never used +static double semitones_werckmeister3[] = { 1.0, 1.06425952556, 1.125, 1.19729196625, 1.26134462288, 1.33785800438, 1.41901270074, 1.5, 1.59638928833, 1.68179283051, 1.78986403988, 1.89201693432, 2.0 }; +static double semitones_kirnberger3[] = { 1.0, 1.06335913331, 1.12151158592, 1.19627902498, 1.26027749133, 1.33748060995, 1.41781217775, 1.49534878122, 1.59503869997, 1.68036998845, 1.788854382, 1.890416237, 2.0 }; +static double semitones_diatonic[] = { 1.0, 1.06666666667, 1.125, 1.2, 1.25, 1.35, 1.44, 1.5, 1.6, 1.6875, 1.8, 1.875, 2.0 }; +static double semitones_meantone[] = { 1.0, 1.06998448796, 1.11803398875, 1.19627902498, 1.25, 1.33748060995, 1.4310835056, 1.49534878122, 1.6, 1.67185076244, 1.788854382, 1.86918597653, 2.0}; +Music::Tuning Music::s_tuning = Music::CHROMATIC; + int Music::s_sampling_rate = -1; double Music::s_AFreq = 440.0; const int Music::UNDEFINED_SEMITONE = -1000; @@ -51,6 +59,41 @@ void Music::RemoveSettingsListener(SettingsListener* l) s_settings_listeners.remove(l); } +void Music::SetTuning(Tuning tuning) +{ + int i; + s_tuning=tuning; + switch (tuning) { + case CHROMATIC: + // Nothing to do + break; + case WERCKMEISTER3: + for (i = 0; i < 13; i += 1) + { + s_semitones[i] = semitones_werckmeister3[i]; + } + break; + case KIRNBERGER3: + for (i = 0; i < 13; i += 1) + { + s_semitones[i] = semitones_kirnberger3[i]; + } + break; + case DIATONIC: + for (i = 0; i < 13; i += 1) + { + s_semitones[i] = semitones_diatonic[i]; + } + break; + case MEANTONE: + for (i = 0; i < 13; i += 1) + { + s_semitones[i] = semitones_meantone[i]; + } + break; + } +} + void Music::SetSamplingRate(int sampling_rate) { s_sampling_rate = sampling_rate; diff --git a/libs/Music/Music.h b/libs/Music/Music.h index 18bbd4e..e319851 100644 --- a/libs/Music/Music.h +++ b/libs/Music/Music.h @@ -1,4 +1,4 @@ -// Copyright 2004 "Gilles Degottex" +// Copyright 2004 "Gilles Degottex", 2007 "Florian Hars" // This file is part of "Music" @@ -29,6 +29,8 @@ using namespace std; #include #include +#include + namespace Music { enum NotesName{LOCAL_ANGLO, LOCAL_LATIN}; @@ -40,6 +42,13 @@ namespace Music inline int GetTonality() {return s_tonality;} inline void SetTonality(int tonality) {s_tonality = tonality;} + enum Tuning{CHROMATIC,WERCKMEISTER3,KIRNBERGER3,DIATONIC,MEANTONE}; + extern Tuning s_tuning; + extern double s_semitones[13]; + inline Tuning GetTuning() {return s_tuning;} + void SetTuning(Tuning tuning); + + extern int s_sampling_rate; inline int GetSamplingRate() {return s_sampling_rate;} void SetSamplingRate(int sampling_rate); @@ -70,111 +79,209 @@ namespace Music void AddSettingsListener(SettingsListener* l); void RemoveSettingsListener(SettingsListener* l); -//! convert frequency to a float number of half-tones from A3 -/*! - * \param freq the frequency to convert to \f$\in R+\f$ {Hz} - * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} - * \return the float number of half-tones from A3 \f$\in R\f$ - */ -inline double f2hf(double freq, double AFreq=GetAFreq()) {return 12.0*(log(freq)-log(AFreq))/log(2.0);} -// TODO VERIF -// le ht doit �re le ht le plus proche de freq !! et pas un simple arrondi en dessous de la valeur r�l !! -//! convert frequency to number of half-tones from A3 -/*! - * \param freq the frequency to convert to \f$\in R+\f$ {Hz} - * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} - * \return the number of half-tones from A3. Rounded to the nearest half-tones( - * not a simple integer convertion of \ref f2hf ) \f$\in R\f$ - */ -inline int f2h(double freq, double AFreq=GetAFreq()) -{ - double ht = f2hf(freq, AFreq); - if(ht>0) return int(ht+0.5); - if(ht<0) return int(ht-0.5); - return 0; -} -//! convert number of half-tones to frequency -/*! - * \param ht number of half-tones to convert to \f$\in Z\f$ - * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} - * \return the converted frequency - */ -inline double h2f(double ht, double AFreq=GetAFreq()) {return AFreq * pow(2.0, ht/12.0);} - -//! convert half-tones from A3 to the corresponding note name -/*! - * \param ht number of half-tones to convert to \f$\in Z\f$ - * \param local - * \return his name (Do, Re, Mi, Fa, Sol, La, Si; with '#' if needed) - */ -inline string h2n(int ht, NotesName local=GetNotesName(), int tonality=GetTonality(), bool show_oct=true) -{ - ht += tonality; - - int oct = 4; - while(ht<0) + //! convert frequency to a float number of chromatic half-tones from A3 + /*! + * \param freq the frequency to convert to \f$\in R+\f$ {Hz} + * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} + * \return the float number of half-tones from A3 \f$\in R\f$ + */ + inline double f2hf(double freq, double AFreq=GetAFreq()) + { + return 17.3123404906675624 * log(freq/AFreq); //12.0*(log(freq)-log(AFreq))/log(2.0) + } + //! find the halftone in the array for non-chromatic tunings + // TODO: + // Decide wether the step from 12/2 for linar search to log_2(12) for a + // binary search really matters in a FFT-bound program + /*! + * \param relFreq the frequency divided by the frequency of the next lower A + * \return the number of halftones above this A + */ + inline int f2h_find(double relFreq) + { + if (relFreq < s_semitones[1]) + { + if (s_semitones[1] / relFreq > relFreq / s_semitones[0]) + { + return 0; + } + else + { + return 1; + } + } + else + { + int i; + for (i = 2; i < 12; i += 1) + { + if (relFreq < s_semitones[i]) { break; } + } + if (s_semitones[i] / relFreq > relFreq / s_semitones[i - 1]) + { + return i - 1; + } + else + { + return i; + } + } + } + // TODO VERIF + // le ht doit �re le ht le plus proche de freq !! et pas un simple arrondi en dessous de la valeur r�l !! + //! convert frequency to number of half-tones from A3 + /*! + * \param freq the frequency to convert to \f$\in R+\f$ {Hz} + * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} + * \return the number of half-tones from A3. Rounded to the nearest half-tones( + * not a simple integer convertion of \ref f2hf ) \f$\in R\f$ + */ + inline int f2h(double freq, double AFreq=GetAFreq(), int tuning=GetTuning()) + { + if (CHROMATIC == tuning) + { + double ht = f2hf(freq, AFreq); + if(ht>0) return int(ht+0.5); + if(ht<0) return int(ht-0.5); + return 0; + } + else + { + if (freq <= 1.0) return UNDEFINED_SEMITONE; + int oct = 0; + while (freq < AFreq) { freq *= 2.0; oct -= 1; } + while (freq >= 2.0 * AFreq) { freq /= 2.0; oct += 1; } + int ht = f2h_find(freq/AFreq); + return (12 * oct + ht); + } + } + //! convert number of chromatic half-tones to frequency + /*! + * \param ht number of half-tones to convert to \f + * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} + * \return the converted frequency + */ + inline double h2f(double ht, double AFreq=GetAFreq()) { - ht += 12; - oct--; + return AFreq * pow(2.0, ht/12.0); } - while(ht>11) + //! convert number of half-tones to frequency + /*! + * \param ht number of half-tones to convert to \f$\in Z\f$ + * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} + * \return the converted frequency + */ + inline double h2cf(int ht, double AFreq=GetAFreq(), int tuning=GetTuning()) { - ht -= 12; - oct++; + if (CHROMATIC == tuning) + { + return AFreq * pow(2.0, ht/12.0); + } + else if (ht >= s_semitone_min) + { + int oct = 0; + while(ht<0) + { + ht += 12; + oct--; + } + while(ht>11) + { + ht -= 12; + oct++; + } + return AFreq * pow(2.0, oct) * s_semitones[ht]; + } + else + { + return 0.0; + } + } + //! convert frequency to the frequency of the nearest half tone + /*! + * \param freq the frequency to convert to \f$\in R+\f$ {Hz} + * \param AFreq tuning frequency of the A3 (Usualy 440) {Hz} + * \return the converted frequency + */ + inline double f2cf(double freq, double AFreq=GetAFreq(), int tuning=GetTuning()) + { + return h2cf(f2h(freq, AFreq, tuning), AFreq, tuning); } - if(ht>2) oct++; // octave start from C -// if(oct<=0) oct--; // skip 0-octave in occidental notations ?? + //! convert half-tones from A3 to the corresponding note name + /*! + * \param ht number of half-tone to convert to \f$\in Z\f$ + * \param local + * \return its name (Do, Re, Mi, Fa, Sol, La, Si; with '#' or 'b' if needed) + */ + inline string h2n(int ht, NotesName local=GetNotesName(), int tonality=GetTonality(), int tunig=GetTuning(), bool show_oct=true) + { + ht += tonality; -// char coct[3]; -// sprintf(coct, "%d", oct); -// string soct = coct; + int oct = 4; + while(ht<0) + { + ht += 12; + oct--; + } + while(ht>11) + { + ht -= 12; + oct++; + } - string soct; - if(show_oct) - soct = StringAddons::toString(oct); + if(ht>2) oct++; // octave start from C + // if(oct<=0) oct--; // skip 0-octave in occidental notations ?? - if(local==LOCAL_ANGLO) - { - if(ht==0) return "A"+soct; - else if(ht==1) return "A#"+soct; - else if(ht==2) return "B"+soct; - else if(ht==3) return "C"+soct; - else if(ht==4) return "C#"+soct; - else if(ht==5) return "D"+soct; - else if(ht==6) return "D#"+soct; - else if(ht==7) return "E"+soct; - else if(ht==8) return "F"+soct; - else if(ht==9) return "F#"+soct; - else if(ht==10) return "G"+soct; - else if(ht==11) return "G#"+soct; + // char coct[3]; + // sprintf(coct, "%d", oct); + // string soct = coct; + + string soct; + if(show_oct) + soct = StringAddons::toString(oct); + + if(local==LOCAL_ANGLO) + { + if(ht==0) return "A"+soct; + else if(ht==1) return "Bb"+soct; + else if(ht==2) return "B"+soct; + else if(ht==3) return "C"+soct; + else if(ht==4) return "C#"+soct; + else if(ht==5) return "D"+soct; + else if(ht==6) return "Eb"+soct; + else if(ht==7) return "E"+soct; + else if(ht==8) return "F"+soct; + else if(ht==9) return "F#"+soct; + else if(ht==10) return "G"+soct; + else if(ht==11) return "G#"+soct; + } + else + { + if(ht==0) return "La"+soct; + else if(ht==1) return "Sib"+soct; + else if(ht==2) return "Si"+soct; + else if(ht==3) return "Do"+soct; + else if(ht==4) return "Do#"+soct; + else if(ht==5) return "Re"+soct; + else if(ht==6) return "Mib"+soct; + else if(ht==7) return "Mi"+soct; + else if(ht==8) return "Fa"+soct; + else if(ht==9) return "Fa#"+soct; + else if(ht==10) return "Sol"+soct; + else if(ht==11) return "Sol#"+soct; + } + + return "Th#1138"; } - else + + inline int n2h(const std::string& note, NotesName local=LOCAL_ANGLO, int tonality=GetTonality()) { - if(ht==0) return "La"+soct; - else if(ht==1) return "La#"+soct; - else if(ht==2) return "Si"+soct; - else if(ht==3) return "Do"+soct; - else if(ht==4) return "Do#"+soct; - else if(ht==5) return "Re"+soct; - else if(ht==6) return "Re#"+soct; - else if(ht==7) return "Mi"+soct; - else if(ht==8) return "Fa"+soct; - else if(ht==9) return "Fa#"+soct; - else if(ht==10) return "Sol"+soct; - else if(ht==11) return "Sol#"+soct; + // TODO + return -1; } - return "Th#1138"; -} - -inline int n2h(const std::string& note, NotesName local=LOCAL_ANGLO, int tonality=GetTonality()) -{ - // TODO - return -1; -} - -std::vector conv(const std::vector& u, const std::vector& v); + std::vector conv(const std::vector& u, const std::vector& v); // TODO freq reffinement } diff --git a/src/CustomInstrumentTunerForm.cpp b/src/CustomInstrumentTunerForm.cpp index 2c776e4..e5a70d5 100644 --- a/src/CustomInstrumentTunerForm.cpp +++ b/src/CustomInstrumentTunerForm.cpp @@ -63,6 +63,7 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() m_settings.add(m_config_form.ui_chkAutoSaveOnExit); m_settings.add(m_config_form.ui_chkShowA4Offset); + m_settings.add(m_config_form.ui_cbTuning); m_settings.add(m_config_form.ui_cbTonality); m_settings.add(m_config_form.ui_cbNotesName); m_settings.add(ui_spinAFreq); @@ -213,6 +214,7 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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())); + connect(m_config_form.ui_cbTuning, SIGNAL(highlighted(int)), this, SLOT(noteRangeChanged())); connect(m_config_form.ui_cbTonality, SIGNAL(highlighted(int)), this, SLOT(noteRangeChanged())); connect(m_config_form.ui_cbNotesName, SIGNAL(highlighted(int)), this, SLOT(noteRangeChanged())); connect(m_config_form.ui_btnAutoDetect, SIGNAL(clicked()), this, SLOT(autoDetectTransport())); @@ -695,6 +697,28 @@ void CustomInstrumentTunerForm::configure() } void CustomInstrumentTunerForm::configure_ok() { + switch(m_config_form.ui_cbTuning->currentItem()) + { + case 0: + SetTuning(CHROMATIC); + break; + case 1: + SetTuning(WERCKMEISTER3); + break; + case 2: + SetTuning(KIRNBERGER3); + break; + case 3: + SetTuning(DIATONIC); + break; + case 4: + SetTuning(MEANTONE); + break; + default: + SetTuning(CHROMATIC); + break; + } + if(m_config_form.ui_cbTonality->currentItem()==0) SetTonality(0); else if(m_config_form.ui_cbTonality->currentItem()==1) SetTonality(+2); else SetTonality(-3); @@ -867,7 +891,7 @@ void CustomInstrumentTunerForm::loadSettings() } catch(QString error) { - cerr << "CustomInstrumentTunerForm: ERROR: " << error << endl; +// cerr << "CustomInstrumentTunerForm: ERROR: " << error << endl; } Pa_Terminate(); #endif diff --git a/src/DummyMonoQuantizer.cpp b/src/DummyMonoQuantizer.cpp index 323ddce..d129d81 100644 --- a/src/DummyMonoQuantizer.cpp +++ b/src/DummyMonoQuantizer.cpp @@ -36,7 +36,7 @@ void DummyMonoQuantizer::quantize(double freq) double current_time = m_time.elapsed(); - double current_center_freq = h2f(f2h(freq)); + double current_center_freq = f2cf(freq); m_avg_freq = freq; if(m_current_center_freq==0.0) diff --git a/src/LatencyMonoQuantizer.cpp b/src/LatencyMonoQuantizer.cpp index b9624a8..5122cb2 100644 --- a/src/LatencyMonoQuantizer.cpp +++ b/src/LatencyMonoQuantizer.cpp @@ -40,13 +40,13 @@ void LatencyMonoQuantizer::quantize(double freq) m_states.push_front(State(current_time, freq)); - double current_center_freq = h2f(f2h(freq)); + double current_center_freq = f2cf(freq); int max_dens = 1; m_avg_freq = freq; map densities; for(int i=0; i::iterator it=densities.find(cf); if(it==densities.end()) densities.insert(make_pair(cf,Note(m_states[i].m_freq))); diff --git a/src/modules/DialView.cpp b/src/modules/DialView.cpp index 0119731..0be471e 100644 --- a/src/modules/DialView.cpp +++ b/src/modules/DialView.cpp @@ -39,7 +39,7 @@ DialView::DialView(QWidget* parent) setting_useCents->addTo(&m_popup_menu); m_popup_menu.insertItem(new Title(tr("Scale range"), &m_popup_menu)); - setting_spinScale = new QSpinBox(5, 50, 1, &m_popup_menu); + setting_spinScale = new QSpinBox(5, 100, 1, &m_popup_menu); setting_spinScale->setValue(50); QToolTip::add(setting_spinScale, tr("Scale range (in cents)")); connect(setting_spinScale, SIGNAL(valueChanged(int)), this, SLOT(update())); diff --git a/src/modules/MicrotonalView.cpp b/src/modules/MicrotonalView.cpp index 8475025..7f4935e 100644 --- a/src/modules/MicrotonalView.cpp +++ b/src/modules/MicrotonalView.cpp @@ -216,7 +216,7 @@ void MScale::load_scala(const QString& file_name) float cents=0.0; stringstream in(buff); in >> cents; - if(cents<=0.0) throw QString("Line ")+QString::number(num_line)+": Parsed cents value is negative '"+QString::number(cents)+"'"; + if(cents<0.0) throw QString("Line ")+QString::number(num_line)+": Parsed cents value is negative '"+QString::number(cents)+"'"; values.push_back(MValue(cents)); } } diff --git a/ui/ConfigForm.ui b/ui/ConfigForm.ui index 93fa781..9cd3db8 100644 --- a/ui/ConfigForm.ui +++ b/ui/ConfigForm.ui @@ -82,6 +82,66 @@ + layout34_1 + + + + unnamed + + + + textLabel1_7_1 + + + Tuning scale + + + The tuning used. + + + The tuning used to determine note values. Useful for tuning historic intruments. + + + + + + Chromatic + + + + + Werckmeister III + + + + + Kirnberger III + + + + + Diatonic + + + + + Meantone (1/4) + + + + ui_cbTuning + + + The tuning used. + + + The tuning used to determine note values. Useful for tuning historic intruments. + + + + + + layout34_2 @@ -434,10 +494,10 @@ Even if the capture system is available, it may not works if it's bad configured automaticaly connect at startup to - Connect automaticaly FMIT to the following source at startup + Connect automaticaly FMIT to the following source at startup (eg. alsa_pcm:capture_1) - Connect automaticaly FMIT to the following source at startup + Connect automaticaly FMIT to the following source at startup (eg. alsa_pcm:capture_1) @@ -456,10 +516,10 @@ Even if the capture system is available, it may not works if it's bad configured - Connect automaticaly FMIT to the this source at startup + Connect automaticaly FMIT to the this source at startup (eg. alsa_pcm:capture_1) - Connect automaticaly FMIT to the this source at startup + Connect automaticaly FMIT to the this source at startup (eg. alsa_pcm:capture_1) diff --git a/ui/InstrumentTunerForm.ui b/ui/InstrumentTunerForm.ui index 0bbf5de..66ffad0 100644 --- a/ui/InstrumentTunerForm.ui +++ b/ui/InstrumentTunerForm.ui @@ -24,7 +24,7 @@ - layout19 + layout42 @@ -407,6 +407,14 @@ Green if a note is beeing catured and conditions are ok ui_txtFreq + + + 1 + 1 + 0 + 0 + + 0 @@ -423,15 +431,15 @@ Green if a note is beeing catured and conditions are ok Flat - The frequency of the current played note + The frequency in Hertz of the current played note - The frequency of the current played note + The frequency in Hertz of the current played note - layout69 + layout40 @@ -484,10 +492,10 @@ Green if a note is beeing catured and conditions are ok Flat - The frequency of the note as it should be + The frequency in Hertz of the note as it should be - The frequency of the note as it should be + The frequency in Hertz of the note as it should be -- 1.7.10.4