/
slider_decibels.py
71 lines (48 loc) · 2.22 KB
/
slider_decibels.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from juce_init import START_JUCE_COMPONENT
import popsicle as juce
class DecibelSlider(juce.Slider):
def __init__(self):
juce.Slider.__init__(self)
def getValueFromText(self, text):
minusInfinitydB = -100.0
decibelText = text.upToFirstOccurrenceOf("dB", False, False).trim()
return minusInfinitydB if decibelText.equalsIgnoreCase("-INF") else decibelText.getDoubleValue()
def getTextFromValue(self, value):
return juce.Decibels.toString(value)
class MainContentComponent(juce.AudioAppComponent):
decibelSlider = juce.Slider()
decibelLabel = juce.Label()
random = juce.Random()
level = 0.0
def __init__(self):
juce.AudioAppComponent.__init__(self)
self.decibelSlider.setRange(-100, -12)
self.decibelSlider.setTextBoxStyle(juce.Slider.TextBoxRight, False, 100, 20)
def valueChanged():
self.level = juce.Decibels.decibelsToGain(float(self.decibelSlider.getValue()))
self.decibelSlider.onValueChange = valueChanged
self.decibelSlider.setValue(juce.Decibels.gainToDecibels(self.level))
self.decibelLabel.setText("Noise Level in dB", juce.dontSendNotification)
self.addAndMakeVisible(self.decibelSlider)
self.addAndMakeVisible(self.decibelLabel)
self.setSize(600, 100)
self.setAudioChannels(0, 2)
def visibilityChanged(self):
if not self.isVisible():
self.shutdownAudio()
def prepareToPlay(self, blockSize, sampleRate):
pass
def getNextAudioBlock(self, bufferToFill):
currentLevel = self.level
levelScale = currentLevel * 2.0
for channel in range(bufferToFill.buffer.getNumChannels()):
buffer = bufferToFill.buffer.getWritePointer(channel, bufferToFill.startSample)
for sample in range(bufferToFill.numSamples):
buffer[sample] = self.random.nextFloat() * levelScale - currentLevel
def releaseResources(self):
pass
def resized(self):
self.decibelLabel .setBounds(10, 10, 120, 20);
self.decibelSlider.setBounds(130, 10, self.getWidth() - 140, 20);
if __name__ == "__main__":
START_JUCE_COMPONENT(MainContentComponent, name="Slider Decibels Example")