kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Upstream version 2.10
rodzic
122cac96e8
commit
6d97a4e93a
41
ChangeLog
41
ChangeLog
|
|
@ -1,26 +1,31 @@
|
|||
Change Log:
|
||||
|
||||
2.10 1) Added history (ctrl-Left-click in waterfall). Available after tracking
|
||||
has started. This does not start a new signal acquisition.
|
||||
2) Psk and ViewPsk use shared signal detection class
|
||||
2.10 1) Added history decoding (ctrl-Left-click in waterfall). Available after
|
||||
tracking has started. This does not start a new signal acquisition.
|
||||
2) Rewrote Psk and ViewPsk to use shared signal detection class
|
||||
3) Made OSS optional and added autoconf macro to detect its presence
|
||||
4) The volume sliders will now be hidden if the mixer is disabled
|
||||
5) Rename some classes so that fldigi builds on Mac OSX.
|
||||
Many thanks to Justin Burket and Diane Bruce.
|
||||
6) Added a <MODEM> macro that changes the current modem
|
||||
7) Added "Log File" status to saved application state
|
||||
8) Added Pulse Audio support
|
||||
9) Added "use default audio device" if h/w changes
|
||||
10) Added HELL80 mode
|
||||
11) Fixes to ringbuffer / audio backends
|
||||
12) Fixes to mfsk picture mode decoding
|
||||
13) Changed frequency2 data file format, downward compatible
|
||||
14) Added FELD_SLOWHELL, FELD_HELLX5 and FELD_HELLX9 modems
|
||||
15) Added support to the PortAudio backend for separate capture and
|
||||
5) Added a <MODEM> macro that changes the current modem
|
||||
6) Added "Log File" status to saved application state
|
||||
7) Added "use default audio device" if h/w changes
|
||||
8) Fixes to ringbuffer / audio backends
|
||||
9) Fixes to mfsk picture mode decoding
|
||||
10) Changed frequency2 data file format, downward compatible
|
||||
11) Added HELL80, FELD_SLOWHELL, FELD_HELLX5 and FELD_HELLX9 modems
|
||||
12) Added Pulse Audio support with support for separate capture and
|
||||
playback devices and sample rates
|
||||
16) Added mt63 500/1000/2000 modes
|
||||
17) Added psk acquisition level control
|
||||
18) Added script to create .app bundles on OS X
|
||||
13) Added mt63 500/1000/2000 modes
|
||||
14) Added psk acquisition level control
|
||||
15) Rename some classes so that fldigi builds on Mac OSX.
|
||||
Added script to create .app bundles on OS X
|
||||
Many thanks to Justin Burket and Diane Bruce.
|
||||
16) Rx-slider, Tx-slider, Squelch-slider values added to the saved
|
||||
application state.
|
||||
17) Increased number of macros to 48. F11 & F12 now accessible by mouse
|
||||
or keyboard. Alt Function key button changed to rotate forward (left-
|
||||
click) and rotate reverse (right-click) through macro sets.
|
||||
18) New color and font selection dialog - Rx / Tx widgets and macro button
|
||||
background colors are user selectable
|
||||
|
||||
2.09 1) Modified src/Makefile.am for FreeBSD name space clash
|
||||
2) Added psk multi-channel viewer with regex search capability
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ dnl major and minor must be integers; patch may
|
|||
dnl contain other characters or be empty
|
||||
m4_define(FLDIGI_MAJOR, [2])
|
||||
m4_define(FLDIGI_MINOR, [10])
|
||||
m4_define(FLDIGI_PATCH, [Z])
|
||||
m4_define(FLDIGI_PATCH, [])
|
||||
|
||||
AC_INIT([fldigi], FLDIGI_MAJOR.FLDIGI_MINOR[FLDIGI_PATCH], [w1hkj AT w1hkj DOT com])
|
||||
|
||||
|
|
@ -38,8 +38,8 @@ AC_CONFIG_HEADER([src/config.h])
|
|||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
|
||||
AC_DEFINE([PACKAGE_HOME], ["http://www.w1hkj.com/Fldigi-2.x.html"], [Home page])
|
||||
AC_DEFINE([PACKAGE_DOCS], ["http://www.w1hkj.com/FldigiHelp-2.0/index.html"], [Docs index])
|
||||
AC_DEFINE([PACKAGE_HOME], ["http://www.w1hkj.com/Fldigi.html"], [Home page])
|
||||
AC_DEFINE([PACKAGE_DOCS], ["http://www.w1hkj.com/FldigiHelp/index.html"], [Docs index])
|
||||
|
||||
|
||||
# Checks for programs.
|
||||
|
|
|
|||
|
|
@ -1165,293 +1165,7 @@ int below(Fl_Widget* w)
|
|||
return (a & FL_ALIGN_BOTTOM) ? w->y() + w->h() + FL_NORMAL_SIZE : w->y() + w->h();
|
||||
}
|
||||
|
||||
/*
|
||||
void create_fl_digi_main() {
|
||||
int pad = wSpace, Y = 0;
|
||||
fl_digi_main = new Fl_Double_Window(
|
||||
progStatus.mainX, progStatus.mainY,
|
||||
progStatus.mainW, progStatus.mainH,
|
||||
"fldigi");
|
||||
mnu = new Fl_Menu_Bar(0, 0, progStatus.mainW - 142, Hmenu);
|
||||
// FL_NORMAL_SIZE may have changed; update the menu items
|
||||
for (size_t i = 0; i < sizeof(menu_)/sizeof(menu_[0]); i++)
|
||||
if (menu_[i].text)
|
||||
menu_[i].labelsize_ = FL_NORMAL_SIZE;
|
||||
mnu->menu(menu_);
|
||||
|
||||
btnTune = new Fl_Button(progStatus.mainW - 142, 0, 60, Hmenu, "TUNE");
|
||||
btnTune->type(FL_TOGGLE_BUTTON);
|
||||
btnTune->callback(cbTune, 0);
|
||||
|
||||
btnMacroTimer = new Fl_Button(progStatus.mainW - 80 - pad, 0, 80, Hmenu);
|
||||
btnMacroTimer->color(fl_rgb_color(255, 255, 100));
|
||||
btnMacroTimer->labelcolor(FL_RED);
|
||||
btnMacroTimer->callback(cbMacroTimerButton, 0);
|
||||
btnMacroTimer->hide();
|
||||
Fl_Box *bx = new Fl_Box(progStatus.mainW - 80 - pad, 0, 80, Hmenu,"");
|
||||
bx->box(FL_UP_BOX);
|
||||
|
||||
|
||||
Y += Hmenu;
|
||||
|
||||
Fl_Group *qsoFrame = new Fl_Group(0, Y, progStatus.mainW, Hqsoframe);
|
||||
inpFreq = new Fl_Input(pad, Y + Hqsoframe/2 - pad, 85, Hqsoframe/2, "Frequency");
|
||||
inpFreq->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
inpTime = new Fl_Input(rightof(inpFreq) + pad, Y + Hqsoframe/2 - pad, 45, Hqsoframe/2, "Time");
|
||||
inpTime->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
qsoTime = new Fl_Button(rightof(inpTime) + pad, Y + Hqsoframe/2 - pad, 24, Hqsoframe/2);
|
||||
Fl_Image *pixmap = new Fl_Pixmap(cal_16);
|
||||
qsoTime->image(pixmap);
|
||||
qsoTime->callback(qsoTime_cb, 0);
|
||||
|
||||
inpCall = new Fl_Input(rightof(qsoTime) + pad, Y + Hqsoframe/2 - pad, 80, Hqsoframe/2, "Call");
|
||||
inpCall->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
// this is likely to be more readable in a constant width font
|
||||
inpCall->textfont(FL_SCREEN);
|
||||
|
||||
inpName = new Fl_Input(rightof(inpCall) + pad, Y + Hqsoframe/2 - pad, 100, Hqsoframe/2, "Name");
|
||||
inpName->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
inpRstIn = new Fl_Input(rightof(inpName) + pad, Y + Hqsoframe/2 - pad, 40, Hqsoframe/2, "RST(r)");
|
||||
inpRstIn->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
inpRstOut = new Fl_Input(rightof(inpRstIn) + pad, Y + Hqsoframe/2 - pad, 40, Hqsoframe/2, "RST(s)");
|
||||
inpRstOut->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
btnQRZ = new Fl_Button(progStatus.mainW - 40 - pad, Y + 1, 40, Hqsoframe/2 - pad, "QRZ");
|
||||
btnQRZ->callback(cb_QRZ, 0);
|
||||
|
||||
inpLoc = new Fl_Input(leftof(btnQRZ) - pad - 80, Y + Hqsoframe/2 - pad, 80, Hqsoframe/2, "Locator");
|
||||
inpLoc->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
inpLoc->textfont(FL_SCREEN);
|
||||
|
||||
inpQth = new Fl_Input(rightof(inpRstOut) + pad, Y + Hqsoframe/2 - pad,
|
||||
leftof(inpLoc) - rightof(inpRstOut) - 2*pad, Hqsoframe/2, "QTH");
|
||||
inpQth->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
qsoFrame->resizable(inpQth);
|
||||
|
||||
qsoClear = new Fl_Button(progStatus.mainW - 40 - pad, Y + Hqsoframe/2 + 1, 40, Hqsoframe/2 - pad, "Clear");
|
||||
qsoClear->callback(qsoClear_cb, 0);
|
||||
|
||||
qsoFrame->end();
|
||||
Y += Hqsoframe;
|
||||
|
||||
Fl_Group *qsoFrame2 = new Fl_Group(0,Y, progStatus.mainW, Hnotes);
|
||||
qsoSave = new Fl_Button(progStatus.mainW - 40 - pad, Y + 1, 40, Hnotes - 2, "Save");
|
||||
qsoSave->callback(qsoSave_cb, 0);
|
||||
|
||||
inpAZ = new Fl_Input(leftof(qsoSave) - 80 - pad, Y, 80, Hnotes, "AZ"); // WA5ZNU
|
||||
inpAZ->align(FL_ALIGN_LEFT);
|
||||
|
||||
// align this vertically with the Call field
|
||||
inpNotes = new Fl_Input(leftof(inpCall), Y, leftof(inpAZ) - leftof(inpCall) - 2*pad, Hnotes, "Notes");
|
||||
inpNotes->align(FL_ALIGN_LEFT);
|
||||
qsoFrame2->resizable(inpNotes);
|
||||
|
||||
btnSideband = new Fl_Button(leftof(inpNotes) - 2*pad - (Hnotes-2), Y+1, Hnotes-2, Hnotes-2, "U");
|
||||
btnSideband->callback(cb_btnSideband, 0);
|
||||
btnSideband->hide();
|
||||
cboBand = new Fl_ComboBox(pad, Y, leftof(btnSideband) - pad, Hnotes, "");
|
||||
cboBand->hide();
|
||||
qsoFrame2->end();
|
||||
Y += Hnotes;
|
||||
|
||||
int sw = 15;
|
||||
int TextH = progStatus.mainH - 140 - Hwfall;
|
||||
MixerFrame = new Fl_Group(0,Y,sw, TextH);
|
||||
valRcvMixer = new Fl_Slider(0, Y, sw, (TextH)/2, "");
|
||||
valRcvMixer->type(FL_VERT_NICE_SLIDER);
|
||||
valRcvMixer->color(fl_rgb_color(0,110,30));
|
||||
valRcvMixer->labeltype(FL_ENGRAVED_LABEL);
|
||||
valRcvMixer->selection_color(fl_rgb_color(255,255,0));
|
||||
valRcvMixer->range(1.0,0.0);
|
||||
valRcvMixer->value(1.0);
|
||||
valRcvMixer->callback( (Fl_Callback *)cb_RcvMixer);
|
||||
valXmtMixer = new Fl_Slider(0, Y + (TextH)/2, sw, (TextH)/2, "");
|
||||
valXmtMixer->type(FL_VERT_NICE_SLIDER);
|
||||
valXmtMixer->color(fl_rgb_color(110,0,30));
|
||||
valXmtMixer->labeltype(FL_ENGRAVED_LABEL);
|
||||
valXmtMixer->selection_color(fl_rgb_color(255,255,0));
|
||||
valXmtMixer->range(1.0,0.0);
|
||||
valXmtMixer->value(1.0);
|
||||
valXmtMixer->callback( (Fl_Callback *)cb_XmtMixer);
|
||||
MixerFrame->end();
|
||||
|
||||
TiledGroup = new Fl_Tile_check(sw, Y, progStatus.mainW - sw, TextH);
|
||||
int minRxHeight = progStatus.RxTextHeight;
|
||||
int minTxHeight;
|
||||
if (minRxHeight < 66) minRxHeight = 66;
|
||||
minTxHeight = TextH - minRxHeight;
|
||||
Fl_Box *minbox = new Fl_Box(sw,Y + 66, progStatus.mainW - sw, TextH - 66 - 32);
|
||||
minbox->hide();
|
||||
|
||||
if (progdefaults.alt_text_widgets)
|
||||
ReceiveText = new FTextView(sw, Y, progStatus.mainW - sw, minRxHeight, "");
|
||||
else
|
||||
ReceiveText = new TextView(sw, Y, progStatus.mainW - sw, minRxHeight, "");
|
||||
ReceiveText->color(
|
||||
fl_rgb_color(
|
||||
progdefaults.RxColor.R,
|
||||
progdefaults.RxColor.G,
|
||||
progdefaults.RxColor.B));
|
||||
FHdisp = new Raster(sw, Y, progStatus.mainW - sw, minRxHeight);
|
||||
FHdisp->hide();
|
||||
Y += minRxHeight;
|
||||
|
||||
if (progdefaults.alt_text_widgets)
|
||||
TransmitText = new FTextEdit(sw, Y, progStatus.mainW - sw, minTxHeight);
|
||||
else
|
||||
TransmitText = new TextEdit(sw, Y, progStatus.mainW - sw, minTxHeight);
|
||||
TransmitText->color(
|
||||
fl_rgb_color(
|
||||
progdefaults.TxColor.R,
|
||||
progdefaults.TxColor.G,
|
||||
progdefaults.TxColor.B));
|
||||
|
||||
Y += minTxHeight;
|
||||
|
||||
TiledGroup->resizable(minbox);
|
||||
TiledGroup->end();
|
||||
Fl_Group::current()->resizable(TiledGroup);
|
||||
|
||||
|
||||
Fl_Box *macroFrame = new Fl_Box(0, Y, progStatus.mainW, Hmacros);
|
||||
macroFrame->box(FL_ENGRAVED_FRAME);
|
||||
int Wbtn = (progStatus.mainW - 30 - 8 - 4)/12;
|
||||
int xpos = 2;
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (i == 4 || i == 8) {
|
||||
bx = new Fl_Box(xpos, Y+2, 5, Hmacros - 4);
|
||||
bx->box(FL_FLAT_BOX);
|
||||
bx->color(FL_BLACK);
|
||||
xpos += 4;
|
||||
}
|
||||
btnMacro[i] = new Fl_Button(xpos, Y+2, Wbtn, Hmacros - 4);
|
||||
btnMacro[i]->callback(macro_cb, (void *)i);
|
||||
btnMacro[i]->label( (macros.name[i]).c_str());
|
||||
colorize_macro(i);
|
||||
xpos += Wbtn;
|
||||
}
|
||||
bx = new Fl_Box(xpos, Y+2, progStatus.mainW - 32 - xpos, Hmacros - 4);
|
||||
bx->box(FL_FLAT_BOX);
|
||||
bx->color(FL_BLACK);
|
||||
btnAltMacros = new Fl_Button(progStatus.mainW - 32, Y+2, 30, Hmacros - 4, "1");
|
||||
btnAltMacros->callback(altmacro_cb, 0);
|
||||
|
||||
Y += Hmacros;
|
||||
|
||||
Fl_Pack *wfpack = new Fl_Pack(0, Y, progStatus.mainW, Hwfall);
|
||||
std::cout << Y << " " << progStatus.mainW << " " << progStatus.mainW - Hwfall +24 << std::endl; std::cout.flush();
|
||||
wfpack->type(1);
|
||||
wf = new waterfall(0, Y, progStatus.mainW - Hwfall + 24, Hwfall);
|
||||
wf->end();
|
||||
Fl_Pack *ypack = new Fl_Pack(progStatus.mainW - (Hwfall-24), Y, Hwfall-24, Hwfall);
|
||||
ypack->type(0);
|
||||
|
||||
digiscope = new Digiscope (progStatus.mainW - (Hwfall-24), Y, Hwfall-24, Hwfall-24);
|
||||
|
||||
pgrsSquelch = new Fl_Progress(
|
||||
progStatus.mainW - (Hwfall-24), Y + Hwfall - 24,
|
||||
Hwfall - 24, 12, "");
|
||||
pgrsSquelch->color(FL_BACKGROUND2_COLOR, FL_DARK_GREEN);
|
||||
sldrSquelch = new Fl_Slider(
|
||||
FL_HOR_NICE_SLIDER,
|
||||
progStatus.mainW - (Hwfall-24), Y + Hwfall - 12,
|
||||
Hwfall - 24, 12, "");
|
||||
|
||||
sldrSquelch->minimum(0);
|
||||
sldrSquelch->maximum(100);
|
||||
sldrSquelch->step(1);
|
||||
sldrSquelch->value(progStatus.sldrSquelchValue);
|
||||
sldrSquelch->callback((Fl_Callback*)cb_sldrSquelch);
|
||||
sldrSquelch->color(FL_INACTIVE_COLOR);
|
||||
|
||||
ypack->end();
|
||||
Fl_Group::current()->resizable(wf);
|
||||
wfpack->end();
|
||||
Y += (Hwfall + 2);
|
||||
|
||||
Fl_Pack *hpack = new Fl_Pack(0, Y, progStatus.mainW, Hstatus);
|
||||
hpack->type(1);
|
||||
MODEstatus = new Fl_Button(0,Hmenu+TextH+Hxmttxt+Hwfall, Wmode, Hstatus, "");
|
||||
MODEstatus->box(FL_DOWN_BOX);
|
||||
MODEstatus->color(FL_BACKGROUND2_COLOR);
|
||||
MODEstatus->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
|
||||
MODEstatus->callback(status_cb, (void *)0);
|
||||
MODEstatus->when(FL_WHEN_CHANGED);
|
||||
MODEstatus->tooltip("Left clk - change mode\nRight clk - Modem Tab");
|
||||
Status1 = new Fl_Box(Wmode,Hmenu+TextH+Hxmttxt+Hwfall, Ws2n, Hstatus, "");
|
||||
Status1->box(FL_DOWN_BOX);
|
||||
Status1->color(FL_BACKGROUND2_COLOR);
|
||||
Status1->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
|
||||
Status2 = new Fl_Box(Wmode+Ws2n, Hmenu+TextH+Hxmttxt+Hwfall, Wimd, Hstatus, "");
|
||||
Status2->box(FL_DOWN_BOX);
|
||||
Status2->color(FL_BACKGROUND2_COLOR);
|
||||
Status2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
|
||||
StatusBar = new Fl_Box(
|
||||
Wmode+Wimd+Ws2n, Hmenu+TextH+Hxmttxt+Hwfall, Wstatus, Hstatus, "");
|
||||
StatusBar->box(FL_DOWN_BOX);
|
||||
StatusBar->color(FL_BACKGROUND2_COLOR);
|
||||
StatusBar->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
|
||||
|
||||
WARNstatus = new Fl_Box(
|
||||
Wmode+Wimd+Ws2n+Wstatus, Hmenu+TextH+Hxmttxt+Hwfall,
|
||||
Wwarn, Hstatus, "");
|
||||
WARNstatus->box(FL_DIAMOND_DOWN_BOX);
|
||||
WARNstatus->color(FL_BACKGROUND_COLOR);
|
||||
WARNstatus->labelcolor(FL_RED);
|
||||
WARNstatus->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
|
||||
|
||||
if (useCheckButtons) {
|
||||
chk_afconoff = new Fl_Check_Button(
|
||||
progStatus.mainW - bwAfcOnOff - bwSqlOnOff,
|
||||
Hmenu+TextH+Hxmttxt+Hwfall,
|
||||
bwAfcOnOff, Hstatus, "Afc");
|
||||
chk_afconoff->callback(afconoff_cb, 0);
|
||||
chk_afconoff->value(progStatus.afconoff);
|
||||
chk_afconoff->tooltip("AFC on/off");
|
||||
chk_sqlonoff = new Fl_Check_Button(
|
||||
progStatus.mainW - bwSqlOnOff,
|
||||
Hmenu+TextH+Hxmttxt+Hwfall,
|
||||
bwSqlOnOff, Hstatus, "Sql");
|
||||
chk_sqlonoff->callback(sqlonoff_cb, 0);
|
||||
chk_sqlonoff->value(progStatus.sqlonoff);
|
||||
chk_sqlonoff->tooltip("SQL on/off");
|
||||
} else {
|
||||
btn_afconoff = new Fl_Light_Button(
|
||||
progStatus.mainW - bwAfcOnOff - bwSqlOnOff,
|
||||
Hmenu+TextH+Hxmttxt+Hwfall,
|
||||
bwAfcOnOff, Hstatus, "Afc");
|
||||
btn_afconoff->callback(afconoff_cb, 0);
|
||||
btn_afconoff->value(progStatus.afconoff);
|
||||
btn_afconoff->tooltip("AFC on/off");
|
||||
btn_sqlonoff = new Fl_Light_Button(
|
||||
progStatus.mainW - bwSqlOnOff,
|
||||
Hmenu+TextH+Hxmttxt+Hwfall,
|
||||
bwSqlOnOff, Hstatus, "Sql");
|
||||
btn_sqlonoff->callback(sqlonoff_cb, 0);
|
||||
btn_sqlonoff->value(progStatus.sqlonoff);
|
||||
btn_sqlonoff->tooltip("SQL on/off");
|
||||
}
|
||||
|
||||
Fl_Group::current()->resizable(StatusBar);
|
||||
hpack->end();
|
||||
|
||||
fl_digi_main->size_range(progStatus.mainW, progStatus.mainH);
|
||||
fl_digi_main->end();
|
||||
fl_digi_main->callback(cb_wMain);
|
||||
|
||||
#ifndef __APPLE__
|
||||
make_pixmap(&fldigi_icon_pixmap, fldigi_icon_48_xpm);
|
||||
fl_digi_main->icon((char *)fldigi_icon_pixmap);
|
||||
#endif
|
||||
|
||||
fl_digi_main->xclass(PACKAGE_NAME);
|
||||
}
|
||||
*/
|
||||
//*
|
||||
void create_fl_digi_main() {
|
||||
int pad = wSpace, Y = 0;
|
||||
fl_digi_main = new Fl_Double_Window(WNOM, HNOM, "fldigi");
|
||||
|
|
@ -1732,7 +1446,7 @@ void create_fl_digi_main() {
|
|||
|
||||
fl_digi_main->xclass(PACKAGE_NAME);
|
||||
}
|
||||
//*/
|
||||
|
||||
|
||||
void put_freq(double frequency)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -929,7 +929,7 @@ void SoundPort::src_data_reset(int mode)
|
|||
rx_src_state = src_new(sample_converter, 2, &err);
|
||||
if (!rx_src_state)
|
||||
throw SndException(src_strerror(err));
|
||||
rx_src_data->src_ratio = req_sample_rate / (dev_sample_rate[STREAM_IN] * (1.0 + rxppm / 1e6));
|
||||
rx_src_data->src_ratio = req_sample_rate / dev_sample_rate[STREAM_IN] * (1.0 + rxppm / 1e6);
|
||||
}
|
||||
if (mode & 1 << O_WRONLY) {
|
||||
if (tx_src_state)
|
||||
|
|
@ -1349,7 +1349,7 @@ void SoundPulse::src_data_reset(int mode)
|
|||
rx_src_state = src_new(sample_converter, stream_params.channels, &err);
|
||||
if (!rx_src_state)
|
||||
throw SndException(src_strerror(err));
|
||||
rx_src_data->src_ratio = sample_frequency / (dev_sample_rate[0] * (1.0 + rxppm / 1e6));
|
||||
rx_src_data->src_ratio = sample_frequency / dev_sample_rate[0] * (1.0 + rxppm / 1e6);
|
||||
}
|
||||
if (mode & 1 << O_WRONLY) {
|
||||
if (tx_src_state)
|
||||
|
|
|
|||
|
|
@ -98,8 +98,9 @@ void trx_trx_receive_loop()
|
|||
}
|
||||
catch (const SndException& e) {
|
||||
put_status(e.what(), 5);
|
||||
scard->Close();
|
||||
#if USE_PORTAUDIO
|
||||
if (e.error() == EBUSY && progdefaults.btnAudioIOis == 1) {
|
||||
if (e.error() == EBUSY && progdefaults.btnAudioIOis == SND_IDX_PORT) {
|
||||
SoundPort::terminate();
|
||||
SoundPort::initialize();
|
||||
}
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue