11// Copyright (C) 2020 John Nesky, distributed under the MIT license.
22
3- import { InstrumentType , EffectType , Config , getPulseWidthRatio , effectsIncludeDistortion , effectsIncludeBitcrusher , effectsIncludePanning , effectsIncludeReverb } from "../synth/SynthConfig" ;
3+ import { InstrumentType , EffectType , Config , getPulseWidthRatio , effectsIncludeNoteFilter , effectsIncludeDistortion , effectsIncludeBitcrusher , effectsIncludePanning , effectsIncludeReverb } from "../synth/SynthConfig" ;
44import { Preset , PresetCategory , EditorConfig , isMobile , prettyNumber } from "./EditorConfig" ;
55import { ColorConfig } from "./ColorConfig" ;
66import { Layout } from "./Layout" ;
@@ -200,10 +200,10 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
200200 private readonly _transitionRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "transition" ) } , "Transition:" ) , div ( { class : "selectContainer" } , this . _transitionSelect ) ) ;
201201 private readonly _effectsDisplayOption : HTMLOptionElement = option ( { selected : true , disabled : true , hidden : false } , "Preferences" ) ; // todo: "hidden" should be true but looks wrong on mac chrome, adds checkmark next to first visible option even though it's not selected. :(
202202 private readonly _effectsSelect : HTMLSelectElement = select ( this . _effectsDisplayOption ) ;
203- private readonly _filterEditor : FilterEditor = new FilterEditor ( this . _doc ) ;
204- private readonly _filterRow : HTMLElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "filter " ) } , "Filter:" ) , this . _filterEditor . container ) ;
205- private readonly _distortionFilterEditor : FilterEditor = new FilterEditor ( this . _doc , true ) ;
206- private readonly _distortionFilterRow : HTMLElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "distortionFilter " ) } , "Post- Filter:" ) , this . _distortionFilterEditor . container ) ;
203+ private readonly _eqFilterEditor : FilterEditor = new FilterEditor ( this . _doc ) ;
204+ private readonly _eqFilterRow : HTMLElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "eqFilter " ) } , "EQ Filter:" ) , this . _eqFilterEditor . container ) ;
205+ private readonly _noteFilterEditor : FilterEditor = new FilterEditor ( this . _doc , true ) ;
206+ private readonly _noteFilterRow : HTMLElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "noteFilter " ) } , "Note Filter:" ) , this . _noteFilterEditor . container ) ;
207207 private readonly _filterEnvelopeSelect : HTMLSelectElement = buildOptions ( select ( ) , Config . envelopes . map ( envelope => envelope . name ) ) ;
208208 private _filterEnvelopeRow : HTMLDivElement = div ( { class : "selectRow" , title : "Low-pass Filter Envelope" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "filterEnvelope" ) } , "Filter Env:" ) , div ( { class : "selectContainer" } , this . _filterEnvelopeSelect ) ) ;
209209 private readonly _pulseEnvelopeSelect : HTMLSelectElement = buildOptions ( select ( ) , Config . envelopes . map ( envelope => envelope . name ) ) ;
@@ -213,9 +213,9 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
213213 private readonly _distortionSlider : Slider = new Slider ( input ( { style : "margin: 0;" , type : "range" , min : "0" , max : Config . distortionRange - 1 , value : "0" , step : "1" } ) , this . _doc , ( oldValue : number , newValue : number ) => new ChangeDistortion ( this . _doc , oldValue , newValue ) ) ;
214214 private _distortionRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "distortion" ) } , "Distortion:" ) , this . _distortionSlider . input ) ;
215215 private readonly _bitcrusherQuantizationSlider : Slider = new Slider ( input ( { style : "margin: 0;" , type : "range" , min : "0" , max : Config . bitcrusherQuantizationRange - 1 , value : "0" , step : "1" } ) , this . _doc , ( oldValue : number , newValue : number ) => new ChangeBitcrusherQuantization ( this . _doc , oldValue , newValue ) ) ;
216- private _bitcrusherQuantizationRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "bitcrusherQuantization" ) } , "Bitcrusher :" ) , this . _bitcrusherQuantizationSlider . input ) ;
216+ private _bitcrusherQuantizationRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "bitcrusherQuantization" ) } , "Bit Crush :" ) , this . _bitcrusherQuantizationSlider . input ) ;
217217 private readonly _bitcrusherFreqSlider : Slider = new Slider ( input ( { style : "margin: 0;" , type : "range" , min : "0" , max : Config . bitcrusherFreqRange - 1 , value : "0" , step : "1" } ) , this . _doc , ( oldValue : number , newValue : number ) => new ChangeBitcrusherFreq ( this . _doc , oldValue , newValue ) ) ;
218- private _bitcrusherFreqRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "bitcrusherFreq" ) } , "Bitcrush Freq:" ) , this . _bitcrusherFreqSlider . input ) ;
218+ private _bitcrusherFreqRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "bitcrusherFreq" ) } , "Freq Crush :" ) , this . _bitcrusherFreqSlider . input ) ;
219219 private readonly _sustainSlider : Slider = new Slider ( input ( { style : "margin: 0;" , type : "range" , min : "0" , max : Config . sustainRange - 1 , value : "0" , step : "1" } ) , this . _doc , ( oldValue : number , newValue : number ) => new ChangeSustain ( this . _doc , oldValue , newValue ) ) ;
220220 private _sustainRow : HTMLDivElement = div ( { class : "selectRow" } , span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "sustain" ) } , "Sustain:" ) , this . _sustainSlider . input ) ;
221221 private readonly _intervalSelect : HTMLSelectElement = buildOptions ( select ( ) , Config . intervals . map ( interval => interval . name ) ) ;
@@ -245,8 +245,7 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
245245 "Customize Instrument" ,
246246 ) ;
247247 private readonly _customInstrumentSettingsGroup : HTMLDivElement = div ( { class : "editor-controls" } ,
248- this . _filterRow ,
249- this . _filterEnvelopeRow ,
248+ this . _eqFilterRow ,
250249 this . _transitionRow ,
251250 this . _chordSelectRow ,
252251 this . _vibratoSelectRow ,
@@ -267,8 +266,9 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
267266 span ( { class : "tip" , onclick : ( ) => this . _openPrompt ( "effects" ) } , "Effects:" ) ,
268267 div ( { class : "selectContainer" } , this . _effectsSelect ) ,
269268 ) ,
269+ this . _noteFilterRow ,
270+ this . _filterEnvelopeRow ,
270271 this . _distortionRow ,
271- this . _distortionFilterRow ,
272272 this . _bitcrusherQuantizationRow ,
273273 this . _bitcrusherFreqRow ,
274274 this . _panSliderRow ,
@@ -491,8 +491,8 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
491491 this . _patternArea . addEventListener ( "mousedown" , this . _refocusStage ) ;
492492 this . _trackArea . addEventListener ( "mousedown" , this . _refocusStage ) ;
493493 this . _spectrumEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
494- this . _filterEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
495- this . _distortionFilterEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
494+ this . _eqFilterEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
495+ this . _noteFilterEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
496496 this . _harmonicsEditor . container . addEventListener ( "mousedown" , this . _refocusStage ) ;
497497 this . _tempoStepper . addEventListener ( "keydown" , this . _tempoStepperCaptureNumberKeys , false ) ;
498498 this . mainLayer . addEventListener ( "keydown" , this . _whenKeyPressed ) ;
@@ -709,7 +709,6 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
709709 this . _drumsetGroup . style . display = "" ;
710710 this . _transitionRow . style . display = "none" ;
711711 this . _chordSelectRow . style . display = "none" ;
712- this . _filterEnvelopeRow . style . display = "none" ;
713712 for ( let i : number = 0 ; i < Config . drumCount ; i ++ ) {
714713 setSelectedValue ( this . _drumsetEnvelopeSelects [ i ] , instrument . drumsetEnvelopes [ i ] ) ;
715714 this . _drumsetSpectrumEditors [ i ] . render ( ) ;
@@ -718,7 +717,6 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
718717 this . _drumsetGroup . style . display = "none" ;
719718 this . _transitionRow . style . display = "" ;
720719 this . _chordSelectRow . style . display = "" ;
721- this . _filterEnvelopeRow . style . display = "" ;
722720 }
723721 if ( instrument . type == InstrumentType . chip ) {
724722 this . _chipWaveSelectRow . style . display = "" ;
@@ -774,14 +772,21 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
774772 this . _pulseWidthRow . style . display = "none" ;
775773 }
776774
775+ if ( effectsIncludeNoteFilter ( instrument . effects ) ) {
776+ this . _noteFilterRow . style . display = "" ;
777+ this . _noteFilterEditor . render ( ) ;
778+ this . _filterEnvelopeRow . style . display = "" ;
779+ setSelectedValue ( this . _filterEnvelopeSelect , instrument . filterEnvelope ) ;
780+ } else {
781+ this . _noteFilterRow . style . display = "none" ;
782+ this . _filterEnvelopeRow . style . display = "none" ;
783+ }
784+
777785 if ( effectsIncludeDistortion ( instrument . effects ) ) {
778786 this . _distortionRow . style . display = "" ;
779787 this . _distortionSlider . updateValue ( instrument . distortion ) ;
780- this . _distortionFilterRow . style . display = "" ;
781- this . _distortionFilterEditor . render ( ) ;
782788 } else {
783789 this . _distortionRow . style . display = "none" ;
784- this . _distortionFilterRow . style . display = "none" ;
785790 }
786791
787792 if ( effectsIncludeBitcrusher ( instrument . effects ) ) {
@@ -862,8 +867,7 @@ import {ChangeTempo, ChangeReverb, ChangeVolume, ChangePan, ChangePatternSelecti
862867
863868 this . _instrumentSettingsGroup . style . color = ColorConfig . getChannelColor ( this . _doc . song , this . _doc . channel ) . primaryNote ;
864869
865- this . _filterEditor . render ( ) ;
866- setSelectedValue ( this . _filterEnvelopeSelect , instrument . filterEnvelope ) ;
870+ this . _eqFilterEditor . render ( ) ;
867871 setSelectedValue ( this . _transitionSelect , instrument . transition ) ;
868872 setSelectedValue ( this . _vibratoSelect , instrument . vibrato ) ;
869873 setSelectedValue ( this . _intervalSelect , instrument . interval ) ;
0 commit comments