Skip to content

Commit

Permalink
provide shortcuts for commonly used filters #413
Browse files Browse the repository at this point in the history
  • Loading branch information
3ll3d00d committed Jan 6, 2021
1 parent 380a6f7 commit a38e705
Show file tree
Hide file tree
Showing 6 changed files with 1,060 additions and 750 deletions.
62 changes: 54 additions & 8 deletions src/main/python/model/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@

from model.iir import FilterType, LowShelf, HighShelf, PeakingEQ, SecondOrder_LowPass, \
SecondOrder_HighPass, ComplexLowPass, ComplexHighPass, q_to_s, s_to_q, max_permitted_s, CompleteFilter, COMBINED, \
Passthrough, Gain, Shelf, LinkwitzTransform
Passthrough, Gain, Shelf, LinkwitzTransform, Biquad
from model.limits import dBRangeCalculator, PhaseRangeCalculator
from model.magnitude import MagnitudeModel
from model.preferences import SHOW_ALL_FILTERS, SHOW_NO_FILTERS, FILTER_COLOURS, DISPLAY_SHOW_FILTERS, DISPLAY_Q_STEP, \
DISPLAY_GAIN_STEP, DISPLAY_S_STEP, DISPLAY_FREQ_STEP, get_filter_colour, FILTERS_DEFAULT_Q, FILTERS_DEFAULT_FREQ, \
FILTERS_GEOMETRY
FILTERS_GEOMETRY, FILTERS_DEFAULT_HS_FREQ, FILTERS_DEFAULT_HS_Q, FILTERS_DEFAULT_PEAK_FREQ, FILTERS_DEFAULT_PEAK_Q
from ui.filter import Ui_editFilterDialog

logger = logging.getLogger('filter')
Expand Down Expand Up @@ -381,6 +381,8 @@ def __set_icons(self):
self.subOnlyButton.setIcon(qta.icon('fa5s.compress'))
self.importWorkingButton.setIcon(qta.icon('fa5s.file-import'))
self.importSnapshotButton.setIcon(qta.icon('fa5s.file-import'))
self.pasteWorkingRowButton.setIcon(qta.icon('fa5s.paste'))
self.pasteSnapshotRowButton.setIcon(qta.icon('fa5s.paste'))

def __set_tooltips(self):
self.addSnapshotRowButton.setToolTip('Add new filter to snapshot')
Expand All @@ -398,17 +400,39 @@ def __set_tooltips(self):
self.limitsButton.setToolTip('Set Graph Limits')
self.importWorkingButton.setToolTip('Import Filters from REW')
self.importSnapshotButton.setToolTip('Import Filters from REW')
self.pasteWorkingRowButton.setToolTip('Paste a copy of the currently selected filter')
self.pasteSnapshotRowButton.setToolTip('Paste a copy of the currently selected filter')

def __connect_working_buttons(self):
''' Connects the buttons associated with the working filter. '''
self.addWorkingRowButton.clicked.connect(self.__add_working_filter)
self.removeWorkingRowButton.clicked.connect(self.__remove_working_filter)
self.importWorkingButton.clicked.connect(self.__import_working_filters)
self.pasteWorkingRowButton.clicked.connect(self.__copy_working_filter)
self.addWorkingPeakingButton.clicked.connect(self.__add_working_peaking)
self.addWorkingLowShelfButton.clicked.connect(self.__add_working_low_shelf)
self.addWorkingHighShelfButton.clicked.connect(self.__add_working_high_shelf)

def __add_working_filter(self):
''' adds a new filter. '''
self.__add_filter(self.__make_default_filter(), self.__working, self.workingFilterView)

def __copy_working_filter(self):
''' adds a new filter. '''
self.__add_filter(self.__make_copy_of_filter(), self.__working, self.workingFilterView)

def __add_working_peaking(self):
''' adds a new filter. '''
self.__add_filter(self.__make_default_filter(filter_type=PeakingEQ), self.__working, self.workingFilterView)

def __add_working_low_shelf(self):
''' adds a new filter. '''
self.__add_filter(self.__make_default_filter(filter_type=LowShelf), self.__working, self.workingFilterView)

def __add_working_high_shelf(self):
''' adds a new filter. '''
self.__add_filter(self.__make_default_filter(filter_type=HighShelf), self.__working, self.workingFilterView)

def __remove_working_filter(self):
''' removes the selected filter. '''
self.__remove_filter(self.workingFilterView, self.__working)
Expand All @@ -423,32 +447,54 @@ def __connect_snapshot_buttons(self):
self.addSnapshotRowButton.clicked.connect(self.__add_snapshot_filter)
self.removeSnapshotRowButton.clicked.connect(self.__remove_snapshot_filter)
self.importSnapshotButton.clicked.connect(self.__import_snapshot_filters)
self.pasteSnapshotRowButton.clicked.connect(self.__copy_snapshot_filter)

def __add_snapshot_filter(self):
''' adds a new filter. '''
self.__add_filter(self.__make_default_filter(), self.__snapshot, self.snapshotFilterView)

def __copy_snapshot_filter(self):
''' adds a new filter. '''
self.__add_filter(self.__make_copy_of_filter(), self.__snapshot, self.snapshotFilterView)

@staticmethod
def __add_filter(new_filter, filter_model: FilterModel, filter_view: QTableView):
filter_model.save(new_filter)
for idx, f in enumerate(filter_model):
if f.id == new_filter.id:
filter_view.selectRow(idx)

def __make_default_filter(self):
def __make_default_filter(self, filter_type: typing.Type[Biquad] = LowShelf):
''' Creates a new filter using the default preferences or by copying the currently selected filter. '''
if filter_type == LowShelf:
return LowShelf(self.__signal.fs,
self.__preferences.get(FILTERS_DEFAULT_FREQ),
self.__preferences.get(FILTERS_DEFAULT_Q),
0.0,
f_id=uuid4())
elif filter_type == HighShelf:
return HighShelf(self.__signal.fs,
self.__preferences.get(FILTERS_DEFAULT_HS_FREQ),
self.__preferences.get(FILTERS_DEFAULT_HS_Q),
0.0,
f_id=uuid4())
elif filter_type == PeakingEQ:
return PeakingEQ(self.__signal.fs,
self.__preferences.get(FILTERS_DEFAULT_PEAK_FREQ),
self.__preferences.get(FILTERS_DEFAULT_PEAK_Q),
0.0,
f_id=uuid4())

def __make_copy_of_filter(self):
''' Creates a new filter by copying the currently selected filter. '''
active_model, _ = self.__get_active()
if len(active_model) > 0:
for f in active_model:
if f.id == self.__selected_id:
new_f = f.resample(self.__signal.fs)
new_f.id = uuid4()
return new_f
return LowShelf(self.__signal.fs,
self.__preferences.get(FILTERS_DEFAULT_FREQ),
self.__preferences.get(FILTERS_DEFAULT_Q),
0.0,
f_id=uuid4())
return self.__make_default_filter()

def __remove_snapshot_filter(self):
''' removes the selected filter. '''
Expand Down
30 changes: 26 additions & 4 deletions src/main/python/model/preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@
FILTERS_PRESET_x = 'filters/preset_%d'
FILTERS_DEFAULT_Q = 'filters/defaults/q'
FILTERS_DEFAULT_FREQ = 'filters/defaults/freq'
FILTERS_DEFAULT_HS_Q = 'filters/defaults/hs_q'
FILTERS_DEFAULT_HS_FREQ = 'filters/defaults/hs_freq'
FILTERS_DEFAULT_PEAK_Q = 'filters/defaults/peak_q'
FILTERS_DEFAULT_PEAK_FREQ = 'filters/defaults/peak_freq'
FILTERS_GEOMETRY = 'filters/geometry'

SCREEN_GEOMETRY = 'screen/geometry'
Expand Down Expand Up @@ -224,6 +228,10 @@
EXTRACTION_INCLUDE_SUBTITLES: False,
FILTERS_DEFAULT_FREQ: 20.0,
FILTERS_DEFAULT_Q: 0.707,
FILTERS_DEFAULT_HS_FREQ: 80.0,
FILTERS_DEFAULT_HS_Q: 0.707,
FILTERS_DEFAULT_PEAK_FREQ: 20.0,
FILTERS_DEFAULT_PEAK_Q: 1.000,
GRAPH_X_AXIS_SCALE: 'log',
GRAPH_X_MIN: 1,
GRAPH_X_MAX: 160,
Expand Down Expand Up @@ -281,6 +289,10 @@
EXTRACTION_INCLUDE_SUBTITLES: bool,
FILTERS_DEFAULT_FREQ: int,
FILTERS_DEFAULT_Q: float,
FILTERS_DEFAULT_HS_FREQ: int,
FILTERS_DEFAULT_HS_Q: float,
FILTERS_DEFAULT_PEAK_FREQ: int,
FILTERS_DEFAULT_PEAK_Q: float,
GRAPH_X_MIN: int,
GRAPH_X_MAX: int,
GRAPH_EXPAND_Y: bool,
Expand Down Expand Up @@ -486,8 +498,14 @@ def __init__(self, preferences, style_root, main_chart_limits, parent=None):
self.includeSubtitles.setChecked(self.__preferences.get(EXTRACTION_INCLUDE_SUBTITLES))
self.compress.setChecked(self.__preferences.get(EXTRACTION_COMPRESS))

self.filterQ.setValue(self.__preferences.get(FILTERS_DEFAULT_Q))
self.filterFreq.setValue(self.__preferences.get(FILTERS_DEFAULT_FREQ))
self.lsQ.setValue(self.__preferences.get(FILTERS_DEFAULT_Q))
self.lsFreq.setValue(self.__preferences.get(FILTERS_DEFAULT_FREQ))

self.hsQ.setValue(self.__preferences.get(FILTERS_DEFAULT_HS_Q))
self.hsFreq.setValue(self.__preferences.get(FILTERS_DEFAULT_HS_FREQ))

self.peakQ.setValue(self.__preferences.get(FILTERS_DEFAULT_PEAK_Q))
self.peakFreq.setValue(self.__preferences.get(FILTERS_DEFAULT_PEAK_FREQ))

self.beqFiltersDir.setText(self.__preferences.get(BEQ_DOWNLOAD_DIR))

Expand Down Expand Up @@ -627,8 +645,12 @@ def accept(self):
self.__preferences.set(EXTRACTION_INCLUDE_ORIGINAL, self.includeOriginal.isChecked())
self.__preferences.set(EXTRACTION_INCLUDE_SUBTITLES, self.includeSubtitles.isChecked())
self.__preferences.set(EXTRACTION_COMPRESS, self.compress.isChecked())
self.__preferences.set(FILTERS_DEFAULT_FREQ, self.filterFreq.value())
self.__preferences.set(FILTERS_DEFAULT_Q, self.filterQ.value())
self.__preferences.set(FILTERS_DEFAULT_FREQ, self.lsFreq.value())
self.__preferences.set(FILTERS_DEFAULT_Q, self.lsQ.value())
self.__preferences.set(FILTERS_DEFAULT_HS_FREQ, self.hsFreq.value())
self.__preferences.set(FILTERS_DEFAULT_HS_Q, self.hsQ.value())
self.__preferences.set(FILTERS_DEFAULT_PEAK_FREQ, self.peakFreq.value())
self.__preferences.set(FILTERS_DEFAULT_PEAK_Q, self.peakQ.value())
self.__preferences.set(BEQ_DOWNLOAD_DIR, self.beqFiltersDir.text())
self.__preferences.set(BASS_MANAGEMENT_LPF_FS, self.bmlpfFreq.value())
self.__preferences.set(DISPLAY_SMOOTH_PRECALC, self.precalcSmoothing.isChecked())
Expand Down

0 comments on commit a38e705

Please sign in to comment.