Skip to content

Commit

Permalink
Implement audio sample rate selection
Browse files Browse the repository at this point in the history
Close #615.
  • Loading branch information
vladisslav2011 committed Dec 30, 2021
1 parent e5e16cc commit e8773cd
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 20 deletions.
4 changes: 4 additions & 0 deletions src/applications/gqrx/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,10 @@ bool MainWindow::loadConfig(const QString& cfgfile, bool check_crash,
restoreState(m_settings->value("gui/state", saveState()).toByteArray());
}

int_val = m_settings->value("output/sample_rate", 48000).toInt(&conv_ok);
if (conv_ok && (int_val > 0))
rx->set_audio_rate(int_val);

QString indev = m_settings->value("input/device", "").toString();
if (!indev.isEmpty())
{
Expand Down
38 changes: 23 additions & 15 deletions src/applications/gqrx/receiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,7 @@ receiver::receiver(const std::string input_device,

audio_udp_sink = make_udp_sink_f();

#ifdef WITH_PULSEAUDIO
audio_snk = make_pa_sink(audio_device, d_audio_rate, "GQRX", "Audio output");
#elif WITH_PORTAUDIO
audio_snk = make_portaudio_sink(audio_device, d_audio_rate, "GQRX", "Audio output");
#else
audio_snk = gr::audio::sink::make(d_audio_rate, audio_device, true);
#endif

create_audio_device(audio_device);
output_devstr = audio_device;

/* wav sink and source is created when rec/play is started */
Expand Down Expand Up @@ -267,13 +260,7 @@ void receiver::set_output_device(const std::string device)
audio_snk.reset();

try {
#ifdef WITH_PULSEAUDIO
audio_snk = make_pa_sink(device, d_audio_rate, "GQRX", "Audio output");
#elif WITH_PORTAUDIO
audio_snk = make_portaudio_sink(device, d_audio_rate, "GQRX", "Audio output");
#else
audio_snk = gr::audio::sink::make(d_audio_rate, device, true);
#endif
create_audio_device(device);

if (d_demod != RX_DEMOD_OFF)
{
Expand Down Expand Up @@ -961,6 +948,15 @@ receiver::status receiver::set_amsync_pll_bw(float pll_bw)
return STATUS_OK;
}

receiver::status receiver::set_audio_rate(int rate)
{
if(d_audio_rate != rate)
{
d_audio_rate = rate;
}
return STATUS_OK;
}

receiver::status receiver::set_af_gain(float gain_db)
{
float k;
Expand Down Expand Up @@ -1422,3 +1418,15 @@ std::string receiver::escape_filename(std::string filename)
ss2 << std::quoted(ss1.str(), '\'', '\\');
return ss2.str();
}

void receiver::create_audio_device(const std::string device)
{
#ifdef WITH_PULSEAUDIO
audio_snk = make_pa_sink(device, d_audio_rate, "GQRX", "Audio output");
#elif WITH_PORTAUDIO
audio_snk = make_portaudio_sink(device, d_audio_rate, "GQRX", "Audio output");
#else
audio_snk = gr::audio::sink::make(d_audio_rate, device, true);
#endif

}
2 changes: 2 additions & 0 deletions src/applications/gqrx/receiver.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ class receiver
status set_amsync_pll_bw(float pll_bw);

/* Audio parameters */
status set_audio_rate(int rate);
status set_af_gain(float gain_db);
status start_audio_recording(const std::string filename);
status stop_audio_recording();
Expand Down Expand Up @@ -296,6 +297,7 @@ class receiver

//! Get a path to a file containing random bytes
static std::string get_zero_file(void);
void make_audio_device(const std::string device);
};

#endif // RECEIVER_H
18 changes: 18 additions & 0 deletions src/qtgui/ioconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,18 @@ CIoConfig::CIoConfig(QSettings * settings,
connect(ui->inSrCombo, SIGNAL(editTextChanged(QString)), this, SLOT(inputRateChanged(QString)));
connect(ui->decimCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(decimationChanged(int)));
connect(m_scanButton, SIGNAL(clicked(bool)), this, SLOT(onScanButtonClicked()));
ui->outSrCombo->addItem("48 kHz", 48000);
ui->outSrCombo->addItem("44.1 kHz", 44100);
ui->outSrCombo->addItem("24 kHz", 24000);
ui->outSrCombo->addItem("22.05 kHz", 22050);
ui->outSrCombo->addItem("12 kHz", 12000);
ui->outSrCombo->addItem("11.025 kHz", 11025);
ui->outSrCombo->addItem("8 kHz", 8000);
int found = ui->outSrCombo->findData(settings->value("output/sample_rate", 48000));
if (found == -1)
ui->outSrCombo->setCurrentIndex(0);
else
ui->outSrCombo->setCurrentIndex(found);
}

CIoConfig::~CIoConfig()
Expand Down Expand Up @@ -212,6 +224,12 @@ void CIoConfig::saveConfig()
else
m_settings->remove("input/sample_rate");

int_val = ui->outSrCombo->currentData().toInt(&conv_ok);
if (conv_ok)
m_settings->setValue("output/sample_rate", int_val);
else
m_settings->remove("output/sample_rate");

idx = ui->decimCombo->currentIndex();
int_val = idx2decim(idx);
if (int_val < 2)
Expand Down
5 changes: 0 additions & 5 deletions src/qtgui/ioconfig.ui
Original file line number Diff line number Diff line change
Expand Up @@ -316,11 +316,6 @@ Leave it at default unless you know what you are doing.</string>
<property name="toolTip">
<string>Select the audio sample rate</string>
</property>
<item>
<property name="text">
<string>48 kHz</string>
</property>
</item>
</widget>
</item>
</layout>
Expand Down

0 comments on commit e8773cd

Please sign in to comment.