mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-16 09:01:59 -05:00
User configurable audio device buffer sizes
Adjusting these may help with audio drop-outs, particularly on slower CPU systems or heavily loaded systems. Smaller buffer sizes leave less margin for process interruptions, larger sizes waste resources that could impact other processes.
This commit is contained in:
parent
f975f2c181
commit
a0ceace5b4
@ -41,7 +41,8 @@ bool SoundInput::audioError () const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundInput::start(QAudioDeviceInfo const& device, int framesPerBuffer, AudioDevice * sink, unsigned downSampleFactor, AudioDevice::Channel channel)
|
void SoundInput::start(QAudioDeviceInfo const& device, int framesPerBuffer, AudioDevice * sink
|
||||||
|
, unsigned downSampleFactor, AudioDevice::Channel channel)
|
||||||
{
|
{
|
||||||
Q_ASSERT (sink);
|
Q_ASSERT (sink);
|
||||||
|
|
||||||
@ -79,7 +80,9 @@ void SoundInput::start(QAudioDeviceInfo const& device, int framesPerBuffer, Audi
|
|||||||
|
|
||||||
connect (m_stream.data(), &QAudioInput::stateChanged, this, &SoundInput::handleStateChanged);
|
connect (m_stream.data(), &QAudioInput::stateChanged, this, &SoundInput::handleStateChanged);
|
||||||
|
|
||||||
|
qDebug () << "SoundIn default buffer size (bytes):" << m_stream->bufferSize ();
|
||||||
m_stream->setBufferSize (m_stream->format ().bytesForFrames (framesPerBuffer));
|
m_stream->setBufferSize (m_stream->format ().bytesForFrames (framesPerBuffer));
|
||||||
|
qDebug () << "SoundIn selected buffer size (bytes):" << m_stream->bufferSize ();
|
||||||
if (sink->initialize (QIODevice::WriteOnly, channel))
|
if (sink->initialize (QIODevice::WriteOnly, channel))
|
||||||
{
|
{
|
||||||
m_stream->start (sink);
|
m_stream->start (sink);
|
||||||
|
@ -9,15 +9,6 @@
|
|||||||
|
|
||||||
#include "moc_soundout.cpp"
|
#include "moc_soundout.cpp"
|
||||||
|
|
||||||
/*
|
|
||||||
#if defined (WIN32)
|
|
||||||
# define MS_BUFFERED 1000u
|
|
||||||
#else
|
|
||||||
# define MS_BUFFERED 2000u
|
|
||||||
#endif
|
|
||||||
*/
|
|
||||||
# define MS_BUFFERED 200u
|
|
||||||
|
|
||||||
bool SoundOutput::audioError () const
|
bool SoundOutput::audioError () const
|
||||||
{
|
{
|
||||||
bool result (true);
|
bool result (true);
|
||||||
@ -50,11 +41,11 @@ bool SoundOutput::audioError () const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundOutput::setFormat (QAudioDeviceInfo const& device, unsigned channels, unsigned msBuffered)
|
void SoundOutput::setFormat (QAudioDeviceInfo const& device, unsigned channels, int frames_buffered)
|
||||||
{
|
{
|
||||||
Q_ASSERT (0 < channels && channels < 3);
|
Q_ASSERT (0 < channels && channels < 3);
|
||||||
|
|
||||||
m_msBuffered = msBuffered;
|
m_framesBuffered = frames_buffered;
|
||||||
|
|
||||||
QAudioFormat format (device.preferredFormat ());
|
QAudioFormat format (device.preferredFormat ());
|
||||||
// qDebug () << "Preferred audio output format:" << format;
|
// qDebug () << "Preferred audio output format:" << format;
|
||||||
@ -101,9 +92,9 @@ void SoundOutput::restart (QIODevice * source)
|
|||||||
// we have to set this before every start on the stream because the
|
// we have to set this before every start on the stream because the
|
||||||
// Windows implementation seems to forget the buffer size after a
|
// Windows implementation seems to forget the buffer size after a
|
||||||
// stop.
|
// stop.
|
||||||
m_stream->setBufferSize (m_stream->format().bytesForDuration((m_msBuffered ? m_msBuffered : MS_BUFFERED) * 1000));
|
qDebug () << "SoundOut default buffer size (bytes):" << m_stream->bufferSize ();
|
||||||
// qDebug() << "B" << m_stream->bufferSize() <<
|
m_stream->setBufferSize (m_stream->format().bytesForFrames (m_framesBuffered));
|
||||||
// m_stream->periodSize() << m_stream->notifyInterval();
|
qDebug () << "SoundOut selected buffer size (bytes):" << m_stream->bufferSize ();
|
||||||
m_stream->setCategory ("production");
|
m_stream->setCategory ("production");
|
||||||
m_stream->start (source);
|
m_stream->start (source);
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ class SoundOutput
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
SoundOutput ()
|
SoundOutput ()
|
||||||
: m_msBuffered {0u}
|
: m_framesBuffered {0}
|
||||||
, m_volume {1.0}
|
, m_volume {1.0}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -26,7 +26,7 @@ public:
|
|||||||
qreal attenuation () const;
|
qreal attenuation () const;
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setFormat (QAudioDeviceInfo const& device, unsigned channels, unsigned msBuffered = 0u);
|
void setFormat (QAudioDeviceInfo const& device, unsigned channels, int frames_buffered = 0);
|
||||||
void restart (QIODevice *);
|
void restart (QIODevice *);
|
||||||
void suspend ();
|
void suspend ();
|
||||||
void resume ();
|
void resume ();
|
||||||
@ -47,7 +47,7 @@ private Q_SLOTS:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<QAudioOutput> m_stream;
|
QScopedPointer<QAudioOutput> m_stream;
|
||||||
unsigned m_msBuffered;
|
int m_framesBuffered;
|
||||||
qreal m_volume;
|
qreal m_volume;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -242,6 +242,8 @@ namespace
|
|||||||
// Magic numbers for file validation
|
// Magic numbers for file validation
|
||||||
constexpr quint32 qrg_magic {0xadbccbdb};
|
constexpr quint32 qrg_magic {0xadbccbdb};
|
||||||
constexpr quint32 qrg_version {100}; // M.mm
|
constexpr quint32 qrg_version {100}; // M.mm
|
||||||
|
|
||||||
|
constexpr int default_audio_buffer_size = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -649,9 +651,11 @@ private:
|
|||||||
QAudioDeviceInfo audio_input_device_;
|
QAudioDeviceInfo audio_input_device_;
|
||||||
bool default_audio_input_device_selected_;
|
bool default_audio_input_device_selected_;
|
||||||
AudioDevice::Channel audio_input_channel_;
|
AudioDevice::Channel audio_input_channel_;
|
||||||
|
int audio_input_buffer_size_;
|
||||||
QAudioDeviceInfo audio_output_device_;
|
QAudioDeviceInfo audio_output_device_;
|
||||||
bool default_audio_output_device_selected_;
|
bool default_audio_output_device_selected_;
|
||||||
AudioDevice::Channel audio_output_channel_;
|
AudioDevice::Channel audio_output_channel_;
|
||||||
|
int audio_output_buffer_size_;
|
||||||
|
|
||||||
friend class Configuration;
|
friend class Configuration;
|
||||||
};
|
};
|
||||||
@ -681,8 +685,10 @@ bool Configuration::is_active () const {return m_->isVisible ();}
|
|||||||
|
|
||||||
QAudioDeviceInfo const& Configuration::audio_input_device () const {return m_->audio_input_device_;}
|
QAudioDeviceInfo const& Configuration::audio_input_device () const {return m_->audio_input_device_;}
|
||||||
AudioDevice::Channel Configuration::audio_input_channel () const {return m_->audio_input_channel_;}
|
AudioDevice::Channel Configuration::audio_input_channel () const {return m_->audio_input_channel_;}
|
||||||
|
int Configuration::audio_input_buffer_size () const {return m_->audio_input_buffer_size_ * 1024;}
|
||||||
QAudioDeviceInfo const& Configuration::audio_output_device () const {return m_->audio_output_device_;}
|
QAudioDeviceInfo const& Configuration::audio_output_device () const {return m_->audio_output_device_;}
|
||||||
AudioDevice::Channel Configuration::audio_output_channel () const {return m_->audio_output_channel_;}
|
AudioDevice::Channel Configuration::audio_output_channel () const {return m_->audio_output_channel_;}
|
||||||
|
int Configuration::audio_output_buffer_size () const {return m_->audio_output_buffer_size_ * 1024;}
|
||||||
bool Configuration::restart_audio_input () const {return m_->restart_sound_input_device_;}
|
bool Configuration::restart_audio_input () const {return m_->restart_sound_input_device_;}
|
||||||
bool Configuration::restart_audio_output () const {return m_->restart_sound_output_device_;}
|
bool Configuration::restart_audio_output () const {return m_->restart_sound_output_device_;}
|
||||||
auto Configuration::type_2_msg_gen () const -> Type2MsgGen {return m_->type_2_msg_gen_;}
|
auto Configuration::type_2_msg_gen () const -> Type2MsgGen {return m_->type_2_msg_gen_;}
|
||||||
@ -977,7 +983,9 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
|||||||
, degrade_ {0.} // initialize to zero each run, not
|
, degrade_ {0.} // initialize to zero each run, not
|
||||||
// saved in settings
|
// saved in settings
|
||||||
, default_audio_input_device_selected_ {false}
|
, default_audio_input_device_selected_ {false}
|
||||||
|
, audio_input_buffer_size_ {default_audio_buffer_size}
|
||||||
, default_audio_output_device_selected_ {false}
|
, default_audio_output_device_selected_ {false}
|
||||||
|
, audio_output_buffer_size_ {default_audio_buffer_size}
|
||||||
{
|
{
|
||||||
ui_->setupUi (this);
|
ui_->setupUi (this);
|
||||||
|
|
||||||
@ -1189,18 +1197,6 @@ Configuration::impl::impl (Configuration * self, QNetworkAccessManager * network
|
|||||||
//
|
//
|
||||||
ui_->highlighting_list_view->setModel (&next_decode_highlighing_model_);
|
ui_->highlighting_list_view->setModel (&next_decode_highlighing_model_);
|
||||||
|
|
||||||
//
|
|
||||||
// load combo boxes with audio setup choices
|
|
||||||
//
|
|
||||||
default_audio_input_device_selected_ = load_audio_devices (QAudio::AudioInput, ui_->sound_input_combo_box, &audio_input_device_);
|
|
||||||
default_audio_output_device_selected_ = load_audio_devices (QAudio::AudioOutput, ui_->sound_output_combo_box, &audio_output_device_);
|
|
||||||
|
|
||||||
update_audio_channels (ui_->sound_input_combo_box, ui_->sound_input_combo_box->currentIndex (), ui_->sound_input_channel_combo_box, false);
|
|
||||||
update_audio_channels (ui_->sound_output_combo_box, ui_->sound_output_combo_box->currentIndex (), ui_->sound_output_channel_combo_box, true);
|
|
||||||
|
|
||||||
ui_->sound_input_channel_combo_box->setCurrentIndex (audio_input_channel_);
|
|
||||||
ui_->sound_output_channel_combo_box->setCurrentIndex (audio_output_channel_);
|
|
||||||
|
|
||||||
enumerate_rigs ();
|
enumerate_rigs ();
|
||||||
initialize_models ();
|
initialize_models ();
|
||||||
|
|
||||||
@ -1238,6 +1234,21 @@ void Configuration::impl::initialize_models ()
|
|||||||
ui_->sbDegrade->setValue (degrade_);
|
ui_->sbDegrade->setValue (degrade_);
|
||||||
ui_->sbBandwidth->setValue (RxBandwidth_);
|
ui_->sbBandwidth->setValue (RxBandwidth_);
|
||||||
ui_->PTT_method_button_group->button (rig_params_.ptt_type)->setChecked (true);
|
ui_->PTT_method_button_group->button (rig_params_.ptt_type)->setChecked (true);
|
||||||
|
|
||||||
|
//
|
||||||
|
// load combo boxes with audio setup choices
|
||||||
|
//
|
||||||
|
default_audio_input_device_selected_ = load_audio_devices (QAudio::AudioInput, ui_->sound_input_combo_box, &audio_input_device_);
|
||||||
|
default_audio_output_device_selected_ = load_audio_devices (QAudio::AudioOutput, ui_->sound_output_combo_box, &audio_output_device_);
|
||||||
|
|
||||||
|
update_audio_channels (ui_->sound_input_combo_box, ui_->sound_input_combo_box->currentIndex (), ui_->sound_input_channel_combo_box, false);
|
||||||
|
update_audio_channels (ui_->sound_output_combo_box, ui_->sound_output_combo_box->currentIndex (), ui_->sound_output_channel_combo_box, true);
|
||||||
|
|
||||||
|
ui_->sound_input_channel_combo_box->setCurrentIndex (audio_input_channel_);
|
||||||
|
ui_->audio_ip_buffer_spin_box->setValue (audio_input_buffer_size_);
|
||||||
|
ui_->sound_output_channel_combo_box->setCurrentIndex (audio_output_channel_);
|
||||||
|
ui_->audio_op_buffer_spin_box->setValue (audio_output_buffer_size_);
|
||||||
|
|
||||||
ui_->save_path_display_label->setText (save_directory_.absolutePath ());
|
ui_->save_path_display_label->setText (save_directory_.absolutePath ());
|
||||||
ui_->azel_path_display_label->setText (azel_directory_.absolutePath ());
|
ui_->azel_path_display_label->setText (azel_directory_.absolutePath ());
|
||||||
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
|
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
|
||||||
@ -1446,6 +1457,10 @@ void Configuration::impl::read_settings ()
|
|||||||
audio_input_channel_ = AudioDevice::fromString (settings_->value ("AudioInputChannel", "Mono").toString ());
|
audio_input_channel_ = AudioDevice::fromString (settings_->value ("AudioInputChannel", "Mono").toString ());
|
||||||
audio_output_channel_ = AudioDevice::fromString (settings_->value ("AudioOutputChannel", "Mono").toString ());
|
audio_output_channel_ = AudioDevice::fromString (settings_->value ("AudioOutputChannel", "Mono").toString ());
|
||||||
|
|
||||||
|
// retrieve audio buffer size values
|
||||||
|
audio_input_buffer_size_ = settings_->value ("AudioInputBufferSize", default_audio_buffer_size).toInt ();
|
||||||
|
audio_output_buffer_size_ = settings_->value ("AudioOutputBufferSize", default_audio_buffer_size).toInt ();
|
||||||
|
|
||||||
type_2_msg_gen_ = settings_->value ("Type2MsgGen", QVariant::fromValue (Configuration::type_2_msg_3_full)).value<Configuration::Type2MsgGen> ();
|
type_2_msg_gen_ = settings_->value ("Type2MsgGen", QVariant::fromValue (Configuration::type_2_msg_3_full)).value<Configuration::Type2MsgGen> ();
|
||||||
|
|
||||||
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
|
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
|
||||||
@ -1587,6 +1602,8 @@ void Configuration::impl::write_settings ()
|
|||||||
|
|
||||||
settings_->setValue ("AudioInputChannel", AudioDevice::toString (audio_input_channel_));
|
settings_->setValue ("AudioInputChannel", AudioDevice::toString (audio_input_channel_));
|
||||||
settings_->setValue ("AudioOutputChannel", AudioDevice::toString (audio_output_channel_));
|
settings_->setValue ("AudioOutputChannel", AudioDevice::toString (audio_output_channel_));
|
||||||
|
settings_->setValue ("AudioInputBufferSize", audio_input_buffer_size_);
|
||||||
|
settings_->setValue ("AudioOutputBufferSize", audio_output_buffer_size_);
|
||||||
settings_->setValue ("Type2MsgGen", QVariant::fromValue (type_2_msg_gen_));
|
settings_->setValue ("Type2MsgGen", QVariant::fromValue (type_2_msg_gen_));
|
||||||
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
|
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
|
||||||
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
|
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
|
||||||
@ -2041,6 +2058,17 @@ void Configuration::impl::accept ()
|
|||||||
}
|
}
|
||||||
Q_ASSERT (audio_output_channel_ <= AudioDevice::Both);
|
Q_ASSERT (audio_output_channel_ <= AudioDevice::Both);
|
||||||
|
|
||||||
|
if (audio_input_buffer_size_ != ui_->audio_ip_buffer_spin_box->value ())
|
||||||
|
{
|
||||||
|
audio_input_buffer_size_ = ui_->audio_ip_buffer_spin_box->value ();
|
||||||
|
restart_sound_input_device_ = true;
|
||||||
|
}
|
||||||
|
if (audio_output_buffer_size_ != ui_->audio_op_buffer_spin_box->value ())
|
||||||
|
{
|
||||||
|
audio_output_buffer_size_ = ui_->audio_op_buffer_spin_box->value ();
|
||||||
|
restart_sound_output_device_ = true;
|
||||||
|
}
|
||||||
|
|
||||||
my_callsign_ = ui_->callsign_line_edit->text ();
|
my_callsign_ = ui_->callsign_line_edit->text ();
|
||||||
my_grid_ = ui_->grid_line_edit->text ();
|
my_grid_ = ui_->grid_line_edit->text ();
|
||||||
FD_exchange_= ui_->Field_Day_Exchange->text ().toUpper ();
|
FD_exchange_= ui_->Field_Day_Exchange->text ().toUpper ();
|
||||||
|
@ -87,8 +87,10 @@ public:
|
|||||||
|
|
||||||
QAudioDeviceInfo const& audio_input_device () const;
|
QAudioDeviceInfo const& audio_input_device () const;
|
||||||
AudioDevice::Channel audio_input_channel () const;
|
AudioDevice::Channel audio_input_channel () const;
|
||||||
|
int audio_input_buffer_size () const;
|
||||||
QAudioDeviceInfo const& audio_output_device () const;
|
QAudioDeviceInfo const& audio_output_device () const;
|
||||||
AudioDevice::Channel audio_output_channel () const;
|
AudioDevice::Channel audio_output_channel () const;
|
||||||
|
int audio_output_buffer_size () const;
|
||||||
|
|
||||||
// These query methods should be used after a call to exec() to
|
// These query methods should be used after a call to exec() to
|
||||||
// determine if either the audio input or audio output stream
|
// determine if either the audio input or audio output stream
|
||||||
|
185
Configuration.ui
185
Configuration.ui
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>559</width>
|
<width>553</width>
|
||||||
<height>553</height>
|
<height>563</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -1349,46 +1349,6 @@ radio interface behave as expected.</string>
|
|||||||
<string>Soundcard</string>
|
<string>Soundcard</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_6">
|
<layout class="QGridLayout" name="gridLayout_6">
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QComboBox" name="sound_output_combo_box">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Select the audio CODEC to use for transmitting.
|
|
||||||
If this is your default device for system sounds then
|
|
||||||
ensure that all system sounds are disabled otherwise
|
|
||||||
you will broadcast any systems sounds generated during
|
|
||||||
transmitting periods.</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QComboBox" name="sound_input_combo_box">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Select the audio CODEC to use for receiving.</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="sound_input_label">
|
|
||||||
<property name="text">
|
|
||||||
<string>&Input:</string>
|
|
||||||
</property>
|
|
||||||
<property name="buddy">
|
|
||||||
<cstring>sound_input_combo_box</cstring>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
<item row="0" column="2">
|
||||||
<widget class="QComboBox" name="sound_input_channel_combo_box">
|
<widget class="QComboBox" name="sound_input_channel_combo_box">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -1416,6 +1376,16 @@ transmitting periods.</string>
|
|||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="sound_input_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Input:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>sound_input_combo_box</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
<widget class="QComboBox" name="sound_output_channel_combo_box">
|
<widget class="QComboBox" name="sound_output_channel_combo_box">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -1446,6 +1416,81 @@ both here.</string>
|
|||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="4">
|
||||||
|
<widget class="QSpinBox" name="audio_op_buffer_spin_box">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Audio output buffer size in kilo-frames
|
||||||
|
|
||||||
|
Adjust for minimum dropped samples reported. Too low values are likely to cause dropped samples causing audio drop-outs.</string>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string> k</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>128</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="sound_input_combo_box">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Select the audio CODEC to use for receiving.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="4">
|
||||||
|
<widget class="QSpinBox" name="audio_ip_buffer_spin_box">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Audio input buffer size in kilo-frames
|
||||||
|
|
||||||
|
Adjust for minimum dropped samples reported. Too low values are likely to cause dropped samples causing audio drop-outs.</string>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string> k</string>
|
||||||
|
</property>
|
||||||
|
<property name="prefix">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>128</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="sound_output_combo_box">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>1</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Select the audio CODEC to use for transmitting.
|
||||||
|
If this is your default device for system sounds then
|
||||||
|
ensure that all system sounds are disabled otherwise
|
||||||
|
you will broadcast any systems sounds generated during
|
||||||
|
transmitting periods.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="sound_output_label">
|
<widget class="QLabel" name="sound_output_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -1456,6 +1501,26 @@ both here.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QLabel" name="label_16">
|
||||||
|
<property name="text">
|
||||||
|
<string>Buffer:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>audio_ip_buffer_spin_box</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QLabel" name="label_17">
|
||||||
|
<property name="text">
|
||||||
|
<string>Buffer:</string>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>audio_op_buffer_spin_box</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -2951,14 +3016,20 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>use_dynamic_grid</tabstop>
|
<tabstop>use_dynamic_grid</tabstop>
|
||||||
<tabstop>region_combo_box</tabstop>
|
<tabstop>region_combo_box</tabstop>
|
||||||
<tabstop>type_2_msg_gen_combo_box</tabstop>
|
<tabstop>type_2_msg_gen_combo_box</tabstop>
|
||||||
|
<tabstop>decodes_from_top_check_box</tabstop>
|
||||||
|
<tabstop>insert_blank_check_box</tabstop>
|
||||||
|
<tabstop>miles_check_box</tabstop>
|
||||||
<tabstop>TX_messages_check_box</tabstop>
|
<tabstop>TX_messages_check_box</tabstop>
|
||||||
<tabstop>DXCC_check_box</tabstop>
|
<tabstop>DXCC_check_box</tabstop>
|
||||||
|
<tabstop>ppfx_check_box</tabstop>
|
||||||
<tabstop>font_push_button</tabstop>
|
<tabstop>font_push_button</tabstop>
|
||||||
<tabstop>decoded_text_font_push_button</tabstop>
|
<tabstop>decoded_text_font_push_button</tabstop>
|
||||||
<tabstop>monitor_off_check_box</tabstop>
|
<tabstop>monitor_off_check_box</tabstop>
|
||||||
<tabstop>monitor_last_used_check_box</tabstop>
|
<tabstop>monitor_last_used_check_box</tabstop>
|
||||||
<tabstop>quick_call_check_box</tabstop>
|
<tabstop>quick_call_check_box</tabstop>
|
||||||
<tabstop>disable_TX_on_73_check_box</tabstop>
|
<tabstop>disable_TX_on_73_check_box</tabstop>
|
||||||
|
<tabstop>force_call_1st_check_box</tabstop>
|
||||||
|
<tabstop>alternate_bindings_check_box</tabstop>
|
||||||
<tabstop>CW_id_after_73_check_box</tabstop>
|
<tabstop>CW_id_after_73_check_box</tabstop>
|
||||||
<tabstop>enable_VHF_features_check_box</tabstop>
|
<tabstop>enable_VHF_features_check_box</tabstop>
|
||||||
<tabstop>tx_QSY_check_box</tabstop>
|
<tabstop>tx_QSY_check_box</tabstop>
|
||||||
@ -2977,8 +3048,8 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>CAT_one_stop_bit_radio_button</tabstop>
|
<tabstop>CAT_one_stop_bit_radio_button</tabstop>
|
||||||
<tabstop>CAT_two_stop_bit_radio_button</tabstop>
|
<tabstop>CAT_two_stop_bit_radio_button</tabstop>
|
||||||
<tabstop>CAT_handshake_default_radio_button</tabstop>
|
<tabstop>CAT_handshake_default_radio_button</tabstop>
|
||||||
<tabstop>CAT_handshake_none_radio_button</tabstop>
|
|
||||||
<tabstop>CAT_handshake_xon_radio_button</tabstop>
|
<tabstop>CAT_handshake_xon_radio_button</tabstop>
|
||||||
|
<tabstop>CAT_handshake_none_radio_button</tabstop>
|
||||||
<tabstop>CAT_handshake_hardware_radio_button</tabstop>
|
<tabstop>CAT_handshake_hardware_radio_button</tabstop>
|
||||||
<tabstop>force_DTR_combo_box</tabstop>
|
<tabstop>force_DTR_combo_box</tabstop>
|
||||||
<tabstop>force_RTS_combo_box</tabstop>
|
<tabstop>force_RTS_combo_box</tabstop>
|
||||||
@ -2999,8 +3070,10 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>test_PTT_push_button</tabstop>
|
<tabstop>test_PTT_push_button</tabstop>
|
||||||
<tabstop>sound_input_combo_box</tabstop>
|
<tabstop>sound_input_combo_box</tabstop>
|
||||||
<tabstop>sound_input_channel_combo_box</tabstop>
|
<tabstop>sound_input_channel_combo_box</tabstop>
|
||||||
|
<tabstop>audio_ip_buffer_spin_box</tabstop>
|
||||||
<tabstop>sound_output_combo_box</tabstop>
|
<tabstop>sound_output_combo_box</tabstop>
|
||||||
<tabstop>sound_output_channel_combo_box</tabstop>
|
<tabstop>sound_output_channel_combo_box</tabstop>
|
||||||
|
<tabstop>audio_op_buffer_spin_box</tabstop>
|
||||||
<tabstop>save_path_select_push_button</tabstop>
|
<tabstop>save_path_select_push_button</tabstop>
|
||||||
<tabstop>azel_path_select_push_button</tabstop>
|
<tabstop>azel_path_select_push_button</tabstop>
|
||||||
<tabstop>checkBoxPwrBandTxMemory</tabstop>
|
<tabstop>checkBoxPwrBandTxMemory</tabstop>
|
||||||
@ -3016,6 +3089,7 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>clear_DX_check_box</tabstop>
|
<tabstop>clear_DX_check_box</tabstop>
|
||||||
<tabstop>opCallEntry</tabstop>
|
<tabstop>opCallEntry</tabstop>
|
||||||
<tabstop>psk_reporter_check_box</tabstop>
|
<tabstop>psk_reporter_check_box</tabstop>
|
||||||
|
<tabstop>psk_reporter_tcpip_check_box</tabstop>
|
||||||
<tabstop>udp_server_line_edit</tabstop>
|
<tabstop>udp_server_line_edit</tabstop>
|
||||||
<tabstop>udp_server_port_spin_box</tabstop>
|
<tabstop>udp_server_port_spin_box</tabstop>
|
||||||
<tabstop>accept_udp_requests_check_box</tabstop>
|
<tabstop>accept_udp_requests_check_box</tabstop>
|
||||||
@ -3030,9 +3104,13 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>stations_table_view</tabstop>
|
<tabstop>stations_table_view</tabstop>
|
||||||
<tabstop>highlighting_list_view</tabstop>
|
<tabstop>highlighting_list_view</tabstop>
|
||||||
<tabstop>reset_highlighting_to_defaults_push_button</tabstop>
|
<tabstop>reset_highlighting_to_defaults_push_button</tabstop>
|
||||||
|
<tabstop>highlight_by_mode_check_box</tabstop>
|
||||||
|
<tabstop>only_fields_check_box</tabstop>
|
||||||
|
<tabstop>include_WAE_check_box</tabstop>
|
||||||
|
<tabstop>rescan_log_push_button</tabstop>
|
||||||
<tabstop>LotW_CSV_URL_line_edit</tabstop>
|
<tabstop>LotW_CSV_URL_line_edit</tabstop>
|
||||||
<tabstop>LotW_CSV_fetch_push_button</tabstop>
|
|
||||||
<tabstop>LotW_days_since_upload_spin_box</tabstop>
|
<tabstop>LotW_days_since_upload_spin_box</tabstop>
|
||||||
|
<tabstop>LotW_CSV_fetch_push_button</tabstop>
|
||||||
<tabstop>sbNtrials</tabstop>
|
<tabstop>sbNtrials</tabstop>
|
||||||
<tabstop>sbAggressive</tabstop>
|
<tabstop>sbAggressive</tabstop>
|
||||||
<tabstop>cbTwoPass</tabstop>
|
<tabstop>cbTwoPass</tabstop>
|
||||||
@ -3041,13 +3119,18 @@ Right click for insert and delete options.</string>
|
|||||||
<tabstop>sbTxDelay</tabstop>
|
<tabstop>sbTxDelay</tabstop>
|
||||||
<tabstop>cbx2ToneSpacing</tabstop>
|
<tabstop>cbx2ToneSpacing</tabstop>
|
||||||
<tabstop>cbx4ToneSpacing</tabstop>
|
<tabstop>cbx4ToneSpacing</tabstop>
|
||||||
|
<tabstop>rbLowSidelobes</tabstop>
|
||||||
|
<tabstop>rbMaxSensitivity</tabstop>
|
||||||
|
<tabstop>gbSpecialOpActivity</tabstop>
|
||||||
<tabstop>rbFox</tabstop>
|
<tabstop>rbFox</tabstop>
|
||||||
|
<tabstop>rbHound</tabstop>
|
||||||
<tabstop>rbNA_VHF_Contest</tabstop>
|
<tabstop>rbNA_VHF_Contest</tabstop>
|
||||||
<tabstop>rbEU_VHF_Contest</tabstop>
|
|
||||||
<tabstop>rbField_Day</tabstop>
|
<tabstop>rbField_Day</tabstop>
|
||||||
<tabstop>Field_Day_Exchange</tabstop>
|
<tabstop>Field_Day_Exchange</tabstop>
|
||||||
|
<tabstop>rbEU_VHF_Contest</tabstop>
|
||||||
<tabstop>rbRTTY_Roundup</tabstop>
|
<tabstop>rbRTTY_Roundup</tabstop>
|
||||||
<tabstop>RTTY_Exchange</tabstop>
|
<tabstop>RTTY_Exchange</tabstop>
|
||||||
|
<tabstop>rbWW_DIGI</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -3117,13 +3200,13 @@ Right click for insert and delete options.</string>
|
|||||||
</connection>
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
<buttongroups>
|
<buttongroups>
|
||||||
<buttongroup name="PTT_method_button_group"/>
|
|
||||||
<buttongroup name="TX_mode_button_group"/>
|
|
||||||
<buttongroup name="CAT_handshake_button_group"/>
|
|
||||||
<buttongroup name="TX_audio_source_button_group"/>
|
|
||||||
<buttongroup name="special_op_activity_button_group"/>
|
<buttongroup name="special_op_activity_button_group"/>
|
||||||
<buttongroup name="CAT_data_bits_button_group"/>
|
<buttongroup name="TX_mode_button_group"/>
|
||||||
<buttongroup name="split_mode_button_group"/>
|
<buttongroup name="PTT_method_button_group"/>
|
||||||
|
<buttongroup name="CAT_handshake_button_group"/>
|
||||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||||
|
<buttongroup name="split_mode_button_group"/>
|
||||||
|
<buttongroup name="CAT_data_bits_button_group"/>
|
||||||
|
<buttongroup name="TX_audio_source_button_group"/>
|
||||||
</buttongroups>
|
</buttongroups>
|
||||||
</ui>
|
</ui>
|
||||||
|
@ -394,8 +394,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
},
|
},
|
||||||
m_sfx {"P", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A"},
|
m_sfx {"P", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A"},
|
||||||
mem_jt9 {shdmem},
|
mem_jt9 {shdmem},
|
||||||
m_msAudioOutputBuffered (0u),
|
|
||||||
m_framesAudioInputBuffered (RX_SAMPLE_RATE / 10),
|
|
||||||
m_downSampleFactor (downSampleFactor),
|
m_downSampleFactor (downSampleFactor),
|
||||||
m_audioThreadPriority (QThread::HighPriority),
|
m_audioThreadPriority (QThread::HighPriority),
|
||||||
m_bandEdited {false},
|
m_bandEdited {false},
|
||||||
@ -937,8 +935,12 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
connect (&m_wav_future_watcher, &QFutureWatcher<void>::finished, this, &MainWindow::diskDat);
|
connect (&m_wav_future_watcher, &QFutureWatcher<void>::finished, this, &MainWindow::diskDat);
|
||||||
|
|
||||||
connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done()));
|
connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done()));
|
||||||
Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
Q_EMIT startAudioInputStream (m_config.audio_input_device ()
|
||||||
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered);
|
, m_config.audio_input_buffer_size ()
|
||||||
|
, m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
||||||
|
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device ()
|
||||||
|
, AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2
|
||||||
|
, m_config.audio_output_buffer_size ());
|
||||||
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
|
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
|
||||||
|
|
||||||
enable_DXCC_entity (m_config.DXCC ()); // sets text window proportions and (re)inits the logbook
|
enable_DXCC_entity (m_config.DXCC ()); // sets text window proportions and (re)inits the logbook
|
||||||
@ -1277,8 +1279,6 @@ void MainWindow::readSettings()
|
|||||||
// use these initialisation settings to tune the audio o/p buffer
|
// use these initialisation settings to tune the audio o/p buffer
|
||||||
// size and audio thread priority
|
// size and audio thread priority
|
||||||
m_settings->beginGroup ("Tune");
|
m_settings->beginGroup ("Tune");
|
||||||
m_msAudioOutputBuffered = m_settings->value ("Audio/OutputBufferMs").toInt ();
|
|
||||||
m_framesAudioInputBuffered = m_settings->value ("Audio/InputBufferFrames", RX_SAMPLE_RATE / 10).toInt ();
|
|
||||||
m_audioThreadPriority = static_cast<QThread::Priority> (m_settings->value ("Audio/ThreadPriority", QThread::HighPriority).toInt () % 8);
|
m_audioThreadPriority = static_cast<QThread::Priority> (m_settings->value ("Audio/ThreadPriority", QThread::HighPriority).toInt () % 8);
|
||||||
m_settings->endGroup ();
|
m_settings->endGroup ();
|
||||||
|
|
||||||
@ -1799,15 +1799,16 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
|
|||||||
if(m_config.spot_to_psk_reporter ()) pskSetLocal ();
|
if(m_config.spot_to_psk_reporter ()) pskSetLocal ();
|
||||||
|
|
||||||
if(m_config.restart_audio_input ()) {
|
if(m_config.restart_audio_input ()) {
|
||||||
Q_EMIT startAudioInputStream (m_config.audio_input_device (),
|
Q_EMIT startAudioInputStream (m_config.audio_input_device ()
|
||||||
m_framesAudioInputBuffered, m_detector, m_downSampleFactor,
|
, m_config.audio_input_buffer_size ()
|
||||||
m_config.audio_input_channel ());
|
, m_detector, m_downSampleFactor
|
||||||
|
, m_config.audio_input_channel ());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_config.restart_audio_output ()) {
|
if(m_config.restart_audio_output ()) {
|
||||||
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (),
|
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device ()
|
||||||
AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2,
|
, AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2
|
||||||
m_msAudioOutputBuffered);
|
, m_config.audio_output_buffer_size ());
|
||||||
}
|
}
|
||||||
|
|
||||||
displayDialFrequency ();
|
displayDialFrequency ();
|
||||||
|
@ -666,8 +666,6 @@ private:
|
|||||||
|
|
||||||
QSharedMemory *mem_jt9;
|
QSharedMemory *mem_jt9;
|
||||||
QString m_QSOText;
|
QString m_QSOText;
|
||||||
unsigned m_msAudioOutputBuffered;
|
|
||||||
unsigned m_framesAudioInputBuffered;
|
|
||||||
unsigned m_downSampleFactor;
|
unsigned m_downSampleFactor;
|
||||||
QThread::Priority m_audioThreadPriority;
|
QThread::Priority m_audioThreadPriority;
|
||||||
bool m_bandEdited;
|
bool m_bandEdited;
|
||||||
|
Loading…
Reference in New Issue
Block a user