shaderシンセ用の自作クラスを使ってみる。その2
以前、書いたダイヤルで周波数を変える奴。
glSynth.pyはここ
from glSynth import * class MainWindow(GLSynth): def __init__(self, parent=None): super().__init__() self.freq = 0 self.setVolume(0.8) def shaderScript(self): return ''' uniform float freq; float adsr(float t, vec4 e, float s) { return max(0.0, min(1.0, t/max(0.0001, e.x)) - min((1.0 - s) ,max(0.0, t - e.x)*(1.0 - s)/max(0.0001, e.y)) - max(0.0, t - e.z)*s/max(0.0001, e.w)); } void main(){ //gain = vec2( sin((440.0+freq)*6.2831*iTime) * step(iTime,iGateTime) ); gain = vec2( sin((440.0+freq)*6.2831*iTime) * adsr(iTime,vec4(0.005, 0.08, 0.5, 0.1), iGateTime)); } ''' def initializeWindow(self): self.dial = QDial(); self.layout.addWidget(self.dial) self.dial.setSliderPosition(50) self.dial.valueChanged.connect(self.dial_valueChanged) def setUniform(self): glUniform1f(glGetUniformLocation(self.program, "freq"), self.freq) def dial_valueChanged(self, v): self.freq = (v - 50) * 30 #def keyPressEvent(self, e): # super().keyPressEvent(e) if __name__ == '__main__': import sys app = QApplication(sys.argv) main_window = MainWindow() main_window.show() sys.exit(app.exec_())