Skip to content

Commit

Permalink
IQ Tool: add sampling rate and frequency inputs to add ability to pla…
Browse files Browse the repository at this point in the history
…yback arbitrary named files correctly

Recalcute playback time on sampling rate change.
Disable inputs during playback/recording
  • Loading branch information
vladisslav2011 committed Nov 17, 2022
1 parent 53bd3c5 commit e878198
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 12 deletions.
52 changes: 42 additions & 10 deletions src/qtgui/iq_tool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,14 @@ CIqTool::CIqTool(QWidget *parent) :
is_recording = false;
is_playing = false;
bytes_per_sample = 8;
sample_rate = 192000;
recording_sample_rate = 192000;
playback_sample_rate = 192000;
rec_len = 0;
center_freq = 1e8;

//ui->recDirEdit->setText(QDir::currentPath());
ui->sampleRateSpinBox->setValue(playback_sample_rate);
ui->centerFreqSpinBox->setValue(center_freq);

recdir = new QDir(QDir::homePath(), "*.raw");

Expand All @@ -74,18 +77,25 @@ CIqTool::~CIqTool()
/*! \brief Set new sample rate. */
void CIqTool::setSampleRate(qint64 sr)
{
sample_rate = sr;
recording_sample_rate = sr;
setPlaybackSampleRate(sr);
}

/*! \brief Set new playback sample rate. */
void CIqTool::setPlaybackSampleRate(qint64 sr)
{
playback_sample_rate = sr;
ui->sampleRateSpinBox->setValue(sr / 1000.0);

if (!current_file.isEmpty())
{
// Get duration of selected recording and update label
QFileInfo info(*recdir, current_file);
rec_len = (int)(info.size() / (sample_rate * bytes_per_sample));
rec_len = (int)(info.size() / (playback_sample_rate * bytes_per_sample));
refreshTimeWidgets();
}
}


/*! \brief Slot activated when the user selects a file. */
void CIqTool::on_listWidget_currentTextChanged(const QString &currentText)
{
Expand All @@ -94,7 +104,7 @@ void CIqTool::on_listWidget_currentTextChanged(const QString &currentText)
QFileInfo info(*recdir, current_file);

parseFileName(currentText);
rec_len = (int)(info.size() / (sample_rate * bytes_per_sample));
rec_len = (int)(info.size() / (playback_sample_rate * bytes_per_sample));

// Get duration of selected recording and update label
refreshTimeWidgets();
Expand Down Expand Up @@ -128,15 +138,19 @@ void CIqTool::on_playButton_clicked(bool checked)
{
ui->listWidget->setEnabled(false);
ui->recButton->setEnabled(false);
ui->sampleRateSpinBox->setEnabled(false);
ui->centerFreqSpinBox->setEnabled(false);
emit startPlayback(recdir->absoluteFilePath(current_file),
(float)sample_rate, center_freq);
(float)playback_sample_rate, center_freq);
}
}
else
{
emit stopPlayback();
ui->listWidget->setEnabled(true);
ui->recButton->setEnabled(true);
ui->sampleRateSpinBox->setEnabled(true);
ui->centerFreqSpinBox->setEnabled(true);
ui->slider->setValue(0);
}
}
Expand All @@ -152,6 +166,8 @@ void CIqTool::cancelPlayback()
ui->playButton->setChecked(false);
ui->listWidget->setEnabled(true);
ui->recButton->setEnabled(true);
ui->sampleRateSpinBox->setEnabled(true);
ui->centerFreqSpinBox->setEnabled(true);
is_playing = false;
}

Expand All @@ -161,7 +177,7 @@ void CIqTool::on_slider_valueChanged(int value)
{
refreshTimeWidgets();

qint64 seek_pos = (qint64)(value)*sample_rate;
qint64 seek_pos = (qint64)(value) * playback_sample_rate;
emit seek(seek_pos);
}

Expand All @@ -174,6 +190,8 @@ void CIqTool::on_recButton_clicked(bool checked)
if (checked)
{
ui->playButton->setEnabled(false);
ui->sampleRateSpinBox->setEnabled(false);
ui->centerFreqSpinBox->setEnabled(false);
emit startRecording(recdir->path());

refreshDir();
Expand All @@ -182,6 +200,8 @@ void CIqTool::on_recButton_clicked(bool checked)
else
{
ui->playButton->setEnabled(true);
ui->sampleRateSpinBox->setEnabled(true);
ui->centerFreqSpinBox->setEnabled(true);
emit stopRecording();
}
}
Expand All @@ -198,6 +218,8 @@ void CIqTool::cancelRecording()
{
ui->recButton->setChecked(false);
ui->playButton->setEnabled(true);
ui->sampleRateSpinBox->setEnabled(true);
ui->centerFreqSpinBox->setEnabled(true);
is_recording = false;
}

Expand Down Expand Up @@ -279,6 +301,16 @@ void CIqTool::on_recDirButton_clicked()
ui->recDirEdit->setText(dir);
}

void CIqTool::on_centerFreqSpinBox_valueChanged(double value)
{
center_freq = value * 1000.0;
}

void CIqTool::on_sampleRateSpinBox_valueChanged(double value)
{
setPlaybackSampleRate(value * 1000.0);
}

void CIqTool::timeoutFunction(void)
{
refreshDir();
Expand Down Expand Up @@ -321,7 +353,7 @@ void CIqTool::refreshDir()
// update rec_len; if the file being recorded is the one selected
// in the list, the length will update periodically
QFileInfo info(*recdir, current_file);
rec_len = (int)(info.size() / (sample_rate * bytes_per_sample));
rec_len = (int)(info.size() / (recording_sample_rate * bytes_per_sample));
}
}

Expand Down Expand Up @@ -377,7 +409,7 @@ void CIqTool::parseFileName(const QString &filename)
center = list.at(3).toLongLong(&center_ok);

if (sr_ok)
sample_rate = sr;
ui->sampleRateSpinBox->setValue(sr / 1000.0);
if (center_ok)
center_freq = center;
ui->centerFreqSpinBox->setValue(center / 1000.0);
}
6 changes: 5 additions & 1 deletion src/qtgui/iq_tool.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,15 @@ private slots:
void on_playButton_clicked(bool checked);
void on_slider_valueChanged(int value);
void on_listWidget_currentTextChanged(const QString &currentText);
void on_centerFreqSpinBox_valueChanged(double value);
void on_sampleRateSpinBox_valueChanged(double value);
void timeoutFunction(void);

private:
void refreshDir(void);
void refreshTimeWidgets(void);
void parseFileName(const QString &filename);
void setPlaybackSampleRate(qint64 sr);

private:
Ui::CIqTool *ui;
Expand All @@ -98,7 +101,8 @@ private slots:
bool is_recording;
bool is_playing;
int bytes_per_sample; /*!< Bytes per sample (fc = 4) */
int sample_rate; /*!< Current sample rate. */
int playback_sample_rate; /*!< Playback sample rate. */
int recording_sample_rate; /*!< Recording sample rate. */
qint64 center_freq; /*!< Center frequency. */
int rec_len; /*!< Length of a recording in seconds */
};
Expand Down
76 changes: 75 additions & 1 deletion src/qtgui/iq_tool.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>482</width>
<width>499</width>
<height>327</height>
</rect>
</property>
Expand Down Expand Up @@ -209,6 +209,80 @@
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="sampleRateLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Sample Rate, ksps</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="sampleRateSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>999999.989999999990687</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="Frequency">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Frequency, kHz</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="centerFreqSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="maximum">
<double>99999999.989999994635582</double>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources>
Expand Down

0 comments on commit e878198

Please sign in to comment.