Sources: add comments and details fixes
This commit is contained in:
parent
986f736b68
commit
e75e79bb2d
5 changed files with 42 additions and 13 deletions
|
@ -58,6 +58,8 @@ Tuner::Tuner()
|
||||||
note = octave = 0;
|
note = octave = 0;
|
||||||
found = false;
|
found = false;
|
||||||
count_found = count_not_found = 0;
|
count_found = count_not_found = 0;
|
||||||
|
nb_sample_running = 0;
|
||||||
|
note_found = octave_found = -1;
|
||||||
|
|
||||||
if (filename_record) file_record.open(filename_record);
|
if (filename_record) file_record.open(filename_record);
|
||||||
|
|
||||||
|
@ -98,7 +100,9 @@ Tuner::~Tuner()
|
||||||
delete high_filter;
|
delete high_filter;
|
||||||
delete cross;
|
delete cross;
|
||||||
delete recorder;
|
delete recorder;
|
||||||
|
delete probe;
|
||||||
delete scale;
|
delete scale;
|
||||||
|
delete temperaments;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tuner::Start()
|
void Tuner::Start()
|
||||||
|
@ -208,25 +212,30 @@ void Tuner::AudioAnalyse(const int16_t *ptr, int nb_frame)
|
||||||
{
|
{
|
||||||
nb_sample_running += nb_frame;
|
nb_sample_running += nb_frame;
|
||||||
|
|
||||||
|
// record in file is needed
|
||||||
if (filename_record && file_record.is_open()) file_record.write((char*) ptr, nb_frame * sizeof(int16_t));
|
if (filename_record && file_record.is_open()) file_record.write((char*) ptr, nb_frame * sizeof(int16_t));
|
||||||
|
|
||||||
|
// compute every audio frame
|
||||||
while (nb_frame--) ComputeFrame(*ptr++);
|
while (nb_frame--) ComputeFrame(*ptr++);
|
||||||
|
|
||||||
|
// update frequency
|
||||||
if (freq != cross->Freq()) {
|
if (freq != cross->Freq()) {
|
||||||
freq = cross->Freq();
|
freq = cross->Freq();
|
||||||
freqChanged();
|
freqChanged();
|
||||||
|
|
||||||
if (freq) {
|
|
||||||
int n, o;
|
|
||||||
double d;
|
|
||||||
n = scale->FindNote(freq, o, d);
|
|
||||||
SetFound(n, o, d);
|
|
||||||
}
|
|
||||||
else { // no freq
|
|
||||||
SetNotFound();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find note, octave, deviation
|
||||||
|
if (freq) {
|
||||||
|
int n, o = 0;
|
||||||
|
double d = 0;
|
||||||
|
n = scale->FindNote(freq, o, d);
|
||||||
|
SetFound(n, o, d);
|
||||||
|
}
|
||||||
|
else { // no freq
|
||||||
|
SetNotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// prevent screen blanking
|
||||||
if (nb_sample_running >= nbSamplePreventRunning && running) {
|
if (nb_sample_running >= nbSamplePreventRunning && running) {
|
||||||
nb_sample_running = 0;
|
nb_sample_running = 0;
|
||||||
blank_prevent(true);
|
blank_prevent(true);
|
||||||
|
|
|
@ -27,11 +27,21 @@ template<typename A> class LinearFilter {
|
||||||
double *backx, *backy;
|
double *backx, *backy;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* filter constructor
|
||||||
|
*
|
||||||
|
* @param order Order of filter (2 = biquads)
|
||||||
|
* @param a Array of a coefficiants
|
||||||
|
* @param b Array of b coefficiants
|
||||||
|
*/
|
||||||
LinearFilter(int order, double *a, double *b);
|
LinearFilter(int order, double *a, double *b);
|
||||||
~LinearFilter();
|
~LinearFilter();
|
||||||
|
|
||||||
|
/// Clear audio stream
|
||||||
void Clear();
|
void Clear();
|
||||||
|
/// Compute one audio sample
|
||||||
A operator() (A x);
|
A operator() (A x);
|
||||||
|
/// Compute an audio buffer in place
|
||||||
void operator() (A *ptr, int nbFrame);
|
void operator() (A *ptr, int nbFrame);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -53,10 +53,14 @@ template<typename sample_t> class ZeroCross {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ZeroCross(const Config &config);
|
ZeroCross(const Config &config);
|
||||||
|
/// analyse audio buffer
|
||||||
double operator() (sample_t *ptr, int nbFrame);
|
double operator() (sample_t *ptr, int nbFrame);
|
||||||
|
/// analyse one audio sample
|
||||||
void operator() (sample_t v);
|
void operator() (sample_t v);
|
||||||
|
|
||||||
|
/// Clear stream analyse
|
||||||
void Clear();
|
void Clear();
|
||||||
|
/// Get current frequency computed
|
||||||
double Freq();
|
double Freq();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -105,8 +105,11 @@ bool Temperaments::SetTemperament(unsigned int index)
|
||||||
qDebug() << __func__ << "index" << index << "out of range";
|
qDebug() << __func__ << "index" << index << "out of range";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
current = index;
|
if (CheckoutTemperament(list[index])) {
|
||||||
return CheckoutTemperament(list[current]);
|
current = index;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Temperaments::SetTemperament(const QString name)
|
bool Temperaments::SetTemperament(const QString name)
|
||||||
|
|
|
@ -42,14 +42,17 @@ class Temperaments {
|
||||||
std::vector<temp_t> list;
|
std::vector<temp_t> list;
|
||||||
double notes[nb_notes];
|
double notes[nb_notes];
|
||||||
|
|
||||||
|
/// Check data files in directory
|
||||||
void GetDir(const QString & dirname);
|
void GetDir(const QString & dirname);
|
||||||
|
/// Check temperaments in file
|
||||||
void CheckFile(const QString & filename);
|
void CheckFile(const QString & filename);
|
||||||
|
/// Load given temperament
|
||||||
bool CheckoutTemperament(const temp_t & temperament);
|
bool CheckoutTemperament(const temp_t & temperament);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// constructor with dir name to find data files
|
/// constructor with dir name to find data files
|
||||||
Temperaments(const QString & dirname);
|
Temperaments(const QString & dirname);
|
||||||
~Temperaments();
|
~Temperaments() {}
|
||||||
|
|
||||||
/// set current temperament
|
/// set current temperament
|
||||||
bool SetTemperament(const QString name);
|
bool SetTemperament(const QString name);
|
||||||
|
|
Loading…
Reference in a new issue