Updated to quisk-4.1.56.
This commit is contained in:
parent
0da9087a5c
commit
e2909d3c38
@ -1,3 +1,9 @@
|
|||||||
|
Quisk Version 4.1.56 April 2020
|
||||||
|
================================
|
||||||
|
For Linux, if the file /usr/include/portaudio.h is absent, portaudio will not be included in Quisk.
|
||||||
|
This change makes portaudio optional. The change was needed because portaudio breaks wine. Quisk now
|
||||||
|
restores the correct frequency for the 60 meter band. There were some other bug fixes.
|
||||||
|
|
||||||
Quisk Version 4.1.55 April 2020
|
Quisk Version 4.1.55 April 2020
|
||||||
================================
|
================================
|
||||||
The new Sdr Micron radio was missing from the Windows version of Quisk. There are reports that the item
|
The new Sdr Micron radio was missing from the Windows version of Quisk. There are reports that the item
|
||||||
|
2
PKG-INFO
2
PKG-INFO
@ -1,6 +1,6 @@
|
|||||||
Metadata-Version: 1.1
|
Metadata-Version: 1.1
|
||||||
Name: quisk
|
Name: quisk
|
||||||
Version: 4.1.55
|
Version: 4.1.56
|
||||||
Summary: QUISK is a Software Defined Radio (SDR) transceiver that can control various radio hardware.
|
Summary: QUISK is a Software Defined Radio (SDR) transceiver that can control various radio hardware.
|
||||||
Home-page: http://james.ahlstrom.name/quisk/
|
Home-page: http://james.ahlstrom.name/quisk/
|
||||||
Author: James C. Ahlstrom
|
Author: James C. Ahlstrom
|
||||||
|
@ -1 +1 @@
|
|||||||
#Quisk version 4.1.55
|
#Quisk version 4.1.56
|
||||||
|
@ -191,6 +191,7 @@ class Configuration:
|
|||||||
else:
|
else:
|
||||||
print ("Unknown format for", k, fmt)
|
print ("Unknown format for", k, fmt)
|
||||||
except:
|
except:
|
||||||
|
del radio_dict[k]
|
||||||
self.settings_changed = True
|
self.settings_changed = True
|
||||||
errors = errors + "Failed to set %s to %s using format %s\n" % (k, v, fmt)
|
errors = errors + "Failed to set %s to %s using format %s\n" % (k, v, fmt)
|
||||||
#traceback.print_exc()
|
#traceback.print_exc()
|
||||||
@ -286,7 +287,7 @@ class Configuration:
|
|||||||
def GetWidgets(self, app, hardware, conf, frame, gbs, vertBox): # Called fifth
|
def GetWidgets(self, app, hardware, conf, frame, gbs, vertBox): # Called fifth
|
||||||
if Settings[1] == "ConfigFileRadio":
|
if Settings[1] == "ConfigFileRadio":
|
||||||
return False
|
return False
|
||||||
path = self.GetRadioDict()["widgets_file_name"]
|
path = self.GetRadioDict().get("widgets_file_name", '')
|
||||||
path = self.NormPath(path)
|
path = self.NormPath(path)
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
dct = {}
|
dct = {}
|
||||||
@ -1143,7 +1144,7 @@ class BaseWindow(wx.ScrolledWindow):
|
|||||||
return ok
|
return ok
|
||||||
def EvalItem(self, value, fmt4): # Return Python integer, number, boolean, text
|
def EvalItem(self, value, fmt4): # Return Python integer, number, boolean, text
|
||||||
# return is (item_is_ok, evaluated_item)
|
# return is (item_is_ok, evaluated_item)
|
||||||
if fmt4 in ('text', 'rfil'): # text items are always OK
|
if fmt4 not in ('inte', 'numb', 'bool'): # only certain formats are evaluated
|
||||||
return True, value
|
return True, value
|
||||||
jj = value.find('#')
|
jj = value.find('#')
|
||||||
if jj > 0:
|
if jj > 0:
|
||||||
@ -1159,7 +1160,7 @@ class BaseWindow(wx.ScrolledWindow):
|
|||||||
else:
|
else:
|
||||||
v = False
|
v = False
|
||||||
else:
|
else:
|
||||||
return False, None
|
raise ValueError
|
||||||
except:
|
except:
|
||||||
dlg = wx.MessageDialog(None,
|
dlg = wx.MessageDialog(None,
|
||||||
"Can not set item with format %s to value %s" % (fmt4, value),
|
"Can not set item with format %s to value %s" % (fmt4, value),
|
||||||
|
16
docs.html
16
docs.html
@ -255,7 +255,7 @@ sudo apt-get install libfftw3-dev
|
|||||||
<br>
|
<br>
|
||||||
sudo apt-get install libasound2-dev
|
sudo apt-get install libasound2-dev
|
||||||
<br>
|
<br>
|
||||||
sudo apt-get install portaudio19-dev
|
sudo apt-get install portaudio19-dev # Optional, if you want portaudio support
|
||||||
<br>
|
<br>
|
||||||
sudo apt-get install libpulse-dev
|
sudo apt-get install libpulse-dev
|
||||||
<br>
|
<br>
|
||||||
@ -451,7 +451,7 @@ _quisk.so and _quisk.pyd.
|
|||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li>sound_portaudio.c is the sound card access code for PortAudio. </li>
|
<li>sound_portaudio.c is the sound card access code for PortAudio. PortAudio is optional.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
@ -693,15 +693,9 @@ more information.
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
The
|
The PortAudio interface is now optional. Many users are changing to PulseAudio.
|
||||||
PortAudio
|
You can run "python portaudio.py" in a terminal window to
|
||||||
interface is newer, may be easier to get working, and may be used to
|
see a list of available PortAudio names. Here are some PortAudio names:
|
||||||
connect Quisk to other programs (I have not tried this). But for
|
|
||||||
CW, ALSA
|
|
||||||
has
|
|
||||||
lower latency. Run "python portaudio.py" in a terminal window to
|
|
||||||
see a list of available names, or use
|
|
||||||
a different PortAudio tool. Here are some PortAudio names:
|
|
||||||
<br>
|
<br>
|
||||||
<pre>"portaudio:(hw:0,0)" First sound card.
|
<pre>"portaudio:(hw:0,0)" First sound card.
|
||||||
"portaudio:(hw:1,0)" Second sound card, etc.
|
"portaudio:(hw:1,0)" Second sound card, etc.
|
||||||
|
@ -161,12 +161,13 @@ class Hardware(BaseHardware):
|
|||||||
print ("perseus hardware: VarDecimSet: index: %s" % (index))
|
print ("perseus hardware: VarDecimSet: index: %s" % (index))
|
||||||
if index == None:
|
if index == None:
|
||||||
print ("perseus hardware: VarDecimSet: current sampling rate: %d" % self.current_rate)
|
print ("perseus hardware: VarDecimSet: current sampling rate: %d" % self.current_rate)
|
||||||
new_rate = self.current_rate
|
new_rate = self.current_rate = self.application.vardecim_set
|
||||||
else:
|
else:
|
||||||
new_rate = self.rates[index]
|
new_rate = self.rates[index]
|
||||||
|
|
||||||
print ("perseus hardware: VarDecimSet: New sampling rate: %d" % new_rate)
|
print ("perseus hardware: VarDecimSet: New sampling rate: %d" % new_rate)
|
||||||
perseus.set_sampling_rate(int(new_rate))
|
perseus.set_sampling_rate(int(new_rate))
|
||||||
|
self.current_rate = int(new_rate)
|
||||||
|
|
||||||
return int(new_rate)
|
return int(new_rate)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Metadata-Version: 1.1
|
Metadata-Version: 1.1
|
||||||
Name: quisk
|
Name: quisk
|
||||||
Version: 4.1.55
|
Version: 4.1.56
|
||||||
Summary: QUISK is a Software Defined Radio (SDR) transceiver that can control various radio hardware.
|
Summary: QUISK is a Software Defined Radio (SDR) transceiver that can control various radio hardware.
|
||||||
Home-page: http://james.ahlstrom.name/quisk/
|
Home-page: http://james.ahlstrom.name/quisk/
|
||||||
Author: James C. Ahlstrom
|
Author: James C. Ahlstrom
|
||||||
|
4
quisk.py
4
quisk.py
@ -3717,7 +3717,7 @@ class App(wx.App):
|
|||||||
self.mode = conf.default_mode
|
self.mode = conf.default_mode
|
||||||
self.color_list = None
|
self.color_list = None
|
||||||
self.color_index = 0
|
self.color_index = 0
|
||||||
self.vardecim_set = None
|
self.vardecim_set = 48000
|
||||||
self.w_phase = None
|
self.w_phase = None
|
||||||
self.zoom = 1.0
|
self.zoom = 1.0
|
||||||
self.filter_bandwidth = 1000 # filter bandwidth
|
self.filter_bandwidth = 1000 # filter bandwidth
|
||||||
@ -3976,7 +3976,7 @@ The new code supports multiple corrections per band.""")
|
|||||||
self.OpenSound()
|
self.OpenSound()
|
||||||
tune, vfo = Hardware.ReturnFrequency() # Request initial frequency
|
tune, vfo = Hardware.ReturnFrequency() # Request initial frequency
|
||||||
if tune is None or vfo is None: # Set last-used frequency
|
if tune is None or vfo is None: # Set last-used frequency
|
||||||
self.bandBtnGroup.SetLabel(self.lastBand, do_cmd=True)
|
self.bandBtnGroup.SetLabel(self.lastBand, do_cmd=True, direction=0)
|
||||||
else: # Set requested frequency
|
else: # Set requested frequency
|
||||||
self.BandFromFreq(tune)
|
self.BandFromFreq(tune)
|
||||||
self.ChangeDisplayFrequency(tune - vfo, vfo)
|
self.ChangeDisplayFrequency(tune - vfo, vfo)
|
||||||
|
@ -1670,7 +1670,7 @@ freedv_tx_msg = ''
|
|||||||
# This is the list of FreeDV modes and their index number. The starting mode is the first listed.
|
# This is the list of FreeDV modes and their index number. The starting mode is the first listed.
|
||||||
freedv_modes = (('Mode 1600', 0), ('Mode 700', 1), ('Mode 700B', 2),
|
freedv_modes = (('Mode 1600', 0), ('Mode 700', 1), ('Mode 700B', 2),
|
||||||
# ('Mode 2400A', 3), ('Mode 2400B', 4), ('Mode 800XA', 5),
|
# ('Mode 2400A', 3), ('Mode 2400B', 4), ('Mode 800XA', 5),
|
||||||
('Mode 700C', 6), ('Mode 700D', 7), ('Future8', 8), ('Future9', 9))
|
('Mode 700C', 6), ('Mode 700D', 7), ('Mode 2020', 8), ('Future9', 9), ('Future10', 10))
|
||||||
|
|
||||||
# These are the filter bandwidths for each mode. Quisk has built-in optimized filters
|
# These are the filter bandwidths for each mode. Quisk has built-in optimized filters
|
||||||
# for these values, but you can change them if you want.
|
# for these values, but you can change them if you want.
|
||||||
|
@ -1101,7 +1101,7 @@ class RadioButtonGroup:
|
|||||||
button.button.command = self.OnButton
|
button.button.command = self.OnButton
|
||||||
else:
|
else:
|
||||||
button.command = self.OnButton
|
button.command = self.OnButton
|
||||||
def SetLabel(self, label, do_cmd=False):
|
def SetLabel(self, label, do_cmd=False, direction=None):
|
||||||
self.button = None
|
self.button = None
|
||||||
for b in self.buttons:
|
for b in self.buttons:
|
||||||
if self.button is not None:
|
if self.button is not None:
|
||||||
@ -1116,6 +1116,8 @@ class RadioButtonGroup:
|
|||||||
b.SetIndex(index)
|
b.SetIndex(index)
|
||||||
self.button = b
|
self.button = b
|
||||||
b.SetValue(True)
|
b.SetValue(True)
|
||||||
|
if direction is not None:
|
||||||
|
b.direction = direction
|
||||||
elif b.GetLabel() == label:
|
elif b.GetLabel() == label:
|
||||||
b.SetValue(True)
|
b.SetValue(True)
|
||||||
self.button = b
|
self.button = b
|
||||||
|
25
setup.py
25
setup.py
@ -8,7 +8,7 @@ import struct
|
|||||||
# You must define the version here. A title string including
|
# You must define the version here. A title string including
|
||||||
# the version will be written to __init__.py and read by quisk.py.
|
# the version will be written to __init__.py and read by quisk.py.
|
||||||
|
|
||||||
Version = '4.1.55'
|
Version = '4.1.56'
|
||||||
|
|
||||||
fp = open("__init__.py", "w") # write title string
|
fp = open("__init__.py", "w") # write title string
|
||||||
fp.write("#Quisk version %s\n" % Version)
|
fp.write("#Quisk version %s\n" % Version)
|
||||||
@ -16,6 +16,7 @@ fp.close()
|
|||||||
|
|
||||||
is_64bit = struct.calcsize("P") == 8
|
is_64bit = struct.calcsize("P") == 8
|
||||||
|
|
||||||
|
have_portaudio = False
|
||||||
if sys.platform != "win32":
|
if sys.platform != "win32":
|
||||||
try:
|
try:
|
||||||
import wx
|
import wx
|
||||||
@ -25,16 +26,26 @@ if sys.platform != "win32":
|
|||||||
print ("Please install the package libfftw3-dev")
|
print ("Please install the package libfftw3-dev")
|
||||||
if not os.path.isdir("/usr/include/alsa"):
|
if not os.path.isdir("/usr/include/alsa"):
|
||||||
print ("Please install the package libasound2-dev")
|
print ("Please install the package libasound2-dev")
|
||||||
if not os.path.isfile("/usr/include/portaudio.h"):
|
if os.path.isfile("/usr/include/portaudio.h"):
|
||||||
print ("Please install the package portaudio19-dev")
|
have_portaudio = True
|
||||||
if not os.path.isdir("/usr/include/pulse"):
|
if not os.path.isdir("/usr/include/pulse"):
|
||||||
print ("please install the package libpulse-dev")
|
print ("please install the package libpulse-dev")
|
||||||
|
|
||||||
module1 = Extension ('quisk._quisk',
|
libraries = ['asound', 'pulse', 'fftw3', 'm']
|
||||||
libraries = ['asound', 'portaudio', 'pulse', 'fftw3', 'm'],
|
sources = ['quisk.c', 'sound.c', 'sound_alsa.c', 'sound_pulseaudio.c',
|
||||||
sources = ['quisk.c', 'sound.c', 'sound_alsa.c', 'sound_portaudio.c', 'sound_pulseaudio.c',
|
|
||||||
'is_key_down.c', 'microphone.c', 'utility.c',
|
'is_key_down.c', 'microphone.c', 'utility.c',
|
||||||
'filter.c', 'extdemod.c', 'freedv.c'],
|
'filter.c', 'extdemod.c', 'freedv.c']
|
||||||
|
define_macros = []
|
||||||
|
if have_portaudio:
|
||||||
|
libraries.append('portaudio')
|
||||||
|
sources.append('sound_portaudio.c')
|
||||||
|
else:
|
||||||
|
define_macros.append(("QUISK_NO_PORTAUDIO", None))
|
||||||
|
|
||||||
|
module1 = Extension ('quisk._quisk',
|
||||||
|
libraries = libraries,
|
||||||
|
sources = sources,
|
||||||
|
define_macros = define_macros,
|
||||||
)
|
)
|
||||||
|
|
||||||
module2 = Extension ('quisk.sdriqpkg.sdriq',
|
module2 = Extension ('quisk.sdriqpkg.sdriq',
|
||||||
|
10
sound.c
10
sound.c
@ -433,7 +433,11 @@ int read_sound_interface(
|
|||||||
switch( dev->driver )
|
switch( dev->driver )
|
||||||
{
|
{
|
||||||
case DEV_DRIVER_PORTAUDIO:
|
case DEV_DRIVER_PORTAUDIO:
|
||||||
|
#ifdef QUISK_NO_PORTAUDIO
|
||||||
|
nSamples = 0;
|
||||||
|
#else
|
||||||
nSamples = quisk_read_portaudio(dev, cSamples);
|
nSamples = quisk_read_portaudio(dev, cSamples);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case DEV_DRIVER_ALSA:
|
case DEV_DRIVER_ALSA:
|
||||||
nSamples = quisk_read_alsa(dev, cSamples);
|
nSamples = quisk_read_alsa(dev, cSamples);
|
||||||
@ -505,7 +509,9 @@ void play_sound_interface(
|
|||||||
switch( dev->driver )
|
switch( dev->driver )
|
||||||
{
|
{
|
||||||
case DEV_DRIVER_PORTAUDIO:
|
case DEV_DRIVER_PORTAUDIO:
|
||||||
|
#ifndef QUISK_NO_PORTAUDIO
|
||||||
quisk_play_portaudio(dev, nSamples, cSamples, report_latency, volume);
|
quisk_play_portaudio(dev, nSamples, cSamples, report_latency, volume);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case DEV_DRIVER_ALSA:
|
case DEV_DRIVER_ALSA:
|
||||||
quisk_play_alsa(dev, nSamples, cSamples, report_latency, volume);
|
quisk_play_alsa(dev, nSamples, cSamples, report_latency, volume);
|
||||||
@ -860,7 +866,9 @@ void quisk_close_sound(void) // Called from sound thread
|
|||||||
#ifdef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
int cleanup = radio_sound_socket != INVALID_SOCKET || radio_sound_mic_socket != INVALID_SOCKET;
|
int cleanup = radio_sound_socket != INVALID_SOCKET || radio_sound_mic_socket != INVALID_SOCKET;
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef QUISK_NO_PORTAUDIO
|
||||||
quisk_close_sound_portaudio();
|
quisk_close_sound_portaudio();
|
||||||
|
#endif
|
||||||
quisk_close_sound_alsa(CaptureDevices, PlaybackDevices);
|
quisk_close_sound_alsa(CaptureDevices, PlaybackDevices);
|
||||||
quisk_close_sound_pulseaudio();
|
quisk_close_sound_pulseaudio();
|
||||||
if (pt_sample_stop)
|
if (pt_sample_stop)
|
||||||
@ -1168,7 +1176,9 @@ void quisk_start_sound(void) // Called from sound thread
|
|||||||
decide_drivers(PlaybackDevices);
|
decide_drivers(PlaybackDevices);
|
||||||
|
|
||||||
// Let the drivers see the devices and start them up if appropriate
|
// Let the drivers see the devices and start them up if appropriate
|
||||||
|
#ifndef QUISK_NO_PORTAUDIO
|
||||||
quisk_start_sound_portaudio(CaptureDevices, PlaybackDevices);
|
quisk_start_sound_portaudio(CaptureDevices, PlaybackDevices);
|
||||||
|
#endif
|
||||||
quisk_start_sound_pulseaudio(CaptureDevices, PlaybackDevices);
|
quisk_start_sound_pulseaudio(CaptureDevices, PlaybackDevices);
|
||||||
quisk_start_sound_alsa(CaptureDevices, PlaybackDevices);
|
quisk_start_sound_alsa(CaptureDevices, PlaybackDevices);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user