def __init__(self): super().__init__() # variables iniciales de componentes self.started = False self.wave = 'sinusoidal' self.fs= 44100 self.LFO = np.ones(44100) self.t = np.linspace(0,1,self.fs) self.noise = (np.random.rand(self.fs) * 2) - 1 self.copy_noise = self.noise self.ftype = 'low' self.forder = 4 self.delay = True p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) self.a_knob = 11025 self.d_knob = 11025 self.s_knob = 5000 self.r_knob = 11025 # inicializacion de objetos de la GUI self.myLabel1 = QLabel(self) self.myLabel1.setText('Attack: 0ms') self.myLabel1.setStyleSheet("color: white;") self.myLabel1.move(40, 10) self.mySlider1 = QSlider(Qt.Horizontal, self) self.mySlider1.setGeometry(30, 40, 200, 30) self.mySlider1.setMinimum(1) self.mySlider1.name = 'Attack' self.mySlider1.setMaximum(22050) self.mySlider1.setValue(self.a_knob) self.mySlider1.valueChanged[int].connect(self.change_knob) self.myLabel2 = QLabel(self) self.myLabel2.setText('Decay: 0ms') self.myLabel2.setStyleSheet("color: white;") self.myLabel2.move(40, 70) self.mySlider2 = QSlider(Qt.Horizontal, self) self.mySlider2.setGeometry(30, 100, 200, 30) self.mySlider2.setMinimum(1) self.mySlider2.name = 'Decay' self.mySlider2.setMaximum(11025) self.mySlider2.setValue(self.d_knob) self.mySlider2.valueChanged[int].connect(self.change_knob) self.myLabel3 = QLabel(self) self.myLabel3.setText('Sustain: 0ms') self.myLabel3.setStyleSheet("color: white;") self.myLabel3.move(40, 130) self.mySlider3 = QSlider(Qt.Horizontal, self) self.mySlider3.setGeometry(30, 160, 200, 30) self.mySlider3.setMinimum(1) self.mySlider3.name = 'Sustain' self.mySlider3.setMaximum(11025) self.mySlider3.setValue(self.s_knob) self.mySlider3.valueChanged[int].connect(self.change_knob) self.myLabelR = QLabel(self) self.myLabelR.setText('Release: 0ms') self.myLabelR.move(40, 190) self.mySliderR = QSlider(Qt.Horizontal, self) self.mySliderR.setGeometry(30, 220, 200, 30) self.mySliderR.setMinimum(1) self.mySliderR.name = 'Release' self.mySliderR.setMaximum(11025) self.mySliderR.setValue(self.r_knob) self.mySliderR.valueChanged[int].connect(self.change_knob) self.myLabel4 = QLabel(self) self.myLabel4.setText('LFO: 1Hz') self.myLabel4.setStyleSheet("color: white;") self.myLabel4.move(40, 310) self.mySlider4 = QSlider(Qt.Horizontal, self) self.mySlider4.setGeometry(30, 340, 200, 30) self.mySlider4.setMinimum(1) self.mySlider4.setMaximum(100) self.mySlider4.setValue(1) self.mySlider4.name = 'slider_lfo' self.mySlider4.valueChanged[int].connect(self.active_lfo) self.myLabel5 = QLabel(self) self.myLabel5.setText('LFO offset') self.myLabel5.setStyleSheet("color: white;") self.myLabel5.move(40, 370) self.mySlider5 = QSlider(Qt.Horizontal, self) self.mySlider5.setGeometry(30, 400, 200, 30) self.mySlider5.setMinimum(1) self.mySlider5.setMaximum(100) self.mySlider5.setValue(100) self.mySlider5.name = 'slider_lfo' self.mySlider5.valueChanged[int].connect(self.active_lfo) self.myLabel6 = QLabel(self) self.myLabel6.setText('Cutoff Frequency') self.myLabel6.setStyleSheet("color: white;") self.myLabel6.move(300, 230) self.mySlider6 = QSlider(Qt.Horizontal, self) self.mySlider6.setGeometry(300, 260, 200, 30) self.mySlider6.setMinimum(100) self.mySlider6.setMaximum(8000) self.mySlider6.setValue(100) self.mySlider6.name = 'slider_filter' self.mySlider6.valueChanged[int].connect(self.set_filter) self.myLabelQ = QLabel(self) self.myLabelQ.setText('Band Width') self.myLabelQ.move(300, 290) self.mySliderQ = QSlider(Qt.Horizontal, self) self.mySliderQ.setGeometry(300, 320, 200, 30) self.mySliderQ.setMinimum(10) self.mySliderQ.setMaximum(1000) self.mySliderQ.setValue(10) self.mySliderQ.name = 'slider_filter' self.mySliderQ.valueChanged[int].connect(self.set_filter) self.myLabel7 = QLabel(self) self.myLabel7.setText('Filter Order') self.myLabel7.setStyleSheet("color: white;") self.myLabel7.move(300, 350) self.mySlider7 = QSlider(Qt.Horizontal, self) self.mySlider7.setGeometry(300, 380, 200, 30) self.mySlider7.setMinimum(1) self.mySlider7.setMaximum(16) self.mySlider7.setValue(4) self.mySlider7.name = 'order_filter' self.mySlider7.valueChanged[int].connect(self.set_order) self.myLabel8 = QLabel(self) self.myLabel8.setText('Delay') self.myLabel8.setStyleSheet("color: white;") self.myLabel8.move(40, 490) self.mySlider8 = QSlider(Qt.Horizontal, self) self.mySlider8.setGeometry(40, 520, 200, 30) self.mySlider8.setMinimum(1) self.mySlider8.setMaximum(22050) self.mySlider8.setValue(11025) self.mySlider8.name = 'delay' self.mySlider8.valueChanged[int].connect(self.set_delay) radiobutton2 = QRadioButton("Highpass", self) radiobutton2.name = "highpass" radiobutton2.toggled.connect(self.onClickedF) radiobutton2.setStyleSheet("color: white;") radiobutton2.setGeometry(300, 420, 200, 32) radiobutton2 = QRadioButton("Lowpass", self) radiobutton2.name = "lowpass" radiobutton2.toggled.connect(self.onClickedF) radiobutton2.setStyleSheet("color: white;") radiobutton2.setGeometry(300, 460, 200, 32) radiobutton2 = QRadioButton("Bandpass", self) radiobutton2.name = "bandpass" radiobutton2.toggled.connect(self.onClickedF) radiobutton2.setStyleSheet("color: white;") radiobutton2.setGeometry(300, 500, 200, 32) radiobutton2 = QRadioButton("Bandstop", self) radiobutton2.name = "bandstop" radiobutton2.toggled.connect(self.onClickedF) radiobutton2.setStyleSheet("color: white;") radiobutton2.setGeometry(300, 540, 200, 32) self.graphWidget1 = pg.PlotWidget(self) self.graphWidget1.setGeometry(300,20,300,150) self.graphWidget2 = pg.PlotWidget(self) self.graphWidget2.setGeometry(650,20,300,150) self.graphWidget3 = pg.PlotWidget(self) self.graphWidget3.setGeometry(650,190,300,150) radiobutton = QRadioButton("Sine", self) radiobutton.setChecked(True) radiobutton.wave = "sinusoidal" radiobutton.toggled.connect(self.onClicked) radiobutton.setStyleSheet("color: white;") radiobutton.setGeometry(1000, 40, 200, 30) radiobutton = QRadioButton("Triangle", self) radiobutton.wave = "triangle" radiobutton.toggled.connect(self.onClicked) radiobutton.setStyleSheet("color: white;") radiobutton.setGeometry(1000, 100, 200, 31) radiobutton = QRadioButton("Sawtooth", self) radiobutton.wave = "sawtooth" radiobutton.toggled.connect(self.onClicked) radiobutton.setStyleSheet("color: white;") radiobutton.setGeometry(1000, 160, 200, 32) radiobutton = QRadioButton("Square", self) radiobutton.wave = "square" radiobutton.toggled.connect(self.onClicked) radiobutton.setStyleSheet("color: white;") radiobutton.setGeometry(1000, 220, 200, 32) radiobutton = QRadioButton("Noise", self) radiobutton.wave = "noise" radiobutton.toggled.connect(self.onClicked) radiobutton.setStyleSheet("color: white;") radiobutton.setGeometry(1000, 280, 200, 32) self.lfo = QCheckBox('LFO', self) self.lfo.name = 'lfo_box' self.lfo.toggled.connect(self.active_lfo) self.lfo.setStyleSheet("color: white;") self.lfo.setGeometry(40, 250, 100, 32) self.lowpass_check = QCheckBox('Filter', self) self.lowpass_check.name = 'lowpass' self.lowpass_check.setStyleSheet("color: white;") self.lowpass_check.setGeometry(300, 190, 100, 32) self.delay_box = QCheckBox('Delay', self) self.delay_box.name = 'delay_box' self.delay_box.toggled.connect(self.set_delay) self.delay_box.setStyleSheet("color: white;") self.delay_box.setGeometry(40, 430, 100, 32) self.calculate_ASDR(self.a_knob, self.d_knob, self.s_knob, self.r_knob) play_button = QPushButton('Play', self) play_button.name = 'play' play_button.clicked.connect(self.play_mode) play_button.setStyleSheet("color: white; border: 1px solid white; border-radius: 5px; background: black;") play_button.setGeometry(700, 380, 200, 32) play_button = QPushButton('Stop', self) play_button.name = 'stop' play_button.clicked.connect(self.play_mode) play_button.setStyleSheet("color: white; border: 1px solid white; border-radius: 5px; background: black;") play_button.setGeometry(700, 440, 200, 32) order = 12 #orden del filtro nyq = 0.5 * self.fs #máxima frecuencia normal_cutoff = 100 / nyq #calculo real de frecuencia de corte b, a = butter(order, normal_cutoff, btype='low', analog=False) #generacion de numerador y denominador del modelo matematico del filtro w, h = signal.freqs(b, a) self.graphWidget3.setLogMode(True, False) self.graphWidget3.setXRange(1,5) self.graphWidget3.setYRange(-100,100) self.data_filter = self.graphWidget3.plot(w, 20 * np.log10(abs(h))) # inicializar ventana de GUI self.setGeometry(50,50,1100,600) self.setWindowTitle("Synthesizer") self.show()