From 75c1c65c9d63515a1488b63e9df9971984e1f7e8 Mon Sep 17 00:00:00 2001
From: DH4
Date: Sun, 28 May 2017 06:34:34 -0500
Subject: Integration with tassaron2 modular design. True Alpha Rendering
added, several bug fixes.
---
components/__init__.py | 1 +
components/original.py | 113 +++++++++++++++++
components/original.ui | 92 ++++++++++++++
components/text.py | 59 +++++++++
components/text.ui | 329 +++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 594 insertions(+)
create mode 100644 components/__init__.py
create mode 100644 components/original.py
create mode 100644 components/original.ui
create mode 100644 components/text.py
create mode 100644 components/text.ui
(limited to 'components')
diff --git a/components/__init__.py b/components/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/components/__init__.py
@@ -0,0 +1 @@
+
diff --git a/components/original.py b/components/original.py
new file mode 100644
index 0000000..d1caa7b
--- /dev/null
+++ b/components/original.py
@@ -0,0 +1,113 @@
+''' Original Audio Visualization '''
+import numpy
+from PIL import Image, ImageDraw
+from PyQt4 import uic
+import os, random
+
+
+class Component:
+ def widget(self,parent):
+ self.parent = parent
+
+ page = uic.loadUi(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'original.ui'))
+ page.comboBox_visLayout.addItem("Classic")
+ page.comboBox_visLayout.addItem("Split")
+ page.comboBox_visLayout.addItem("Bottom")
+ #visLayoutValue = int(self.settings.value('visLayout'))
+ page.comboBox_visLayout.setCurrentIndex(0)
+ page.comboBox_visLayout.currentIndexChanged.connect(self.update)
+
+ return page
+ def update(self):
+ self.layout = self.page.comboBox_visLayout.currentIndex()
+ print(self.layout)
+ self.parent.drawPreview()
+
+ def previewRender(self, previewWorker, widget):
+ spectrum = numpy.fromfunction(lambda x: 0.008*(x-128)**2, (255,), dtype="int16")
+ width = int(previewWorker.core.settings.value('outputWidth'))
+ height = int(previewWorker.core.settings.value('outputHeight'))
+ return drawBars(width, height, spectrum, (255, 255, 255), self.layout)
+
+ def preFrameRender(self, **kwargs):
+ for kwarg, value in kwargs.items():
+ exec('self.%s = value' % kwarg)
+ self.smoothConstantDown = 0.08
+ self.smoothConstantUp = 0.8
+ self.lastSpectrum = None
+
+ def frameRender(self, moduleNo, frameNo):
+ self.lastSpectrum = transformData(frameNo, self.completeAudioArray, self.sampleSize,
+ self.smoothConstantDown, self.smoothConstantUp, self.lastSpectrum)
+ width = int(self.worker.core.settings.value('outputWidth'))
+ height = int(self.worker.core.settings.value('outputHeight'))
+ return drawBars(width, height, self.lastSpectrum, (255,255,255), self.layout)
+
+def transformData(i, completeAudioArray, sampleSize, smoothConstantDown, smoothConstantUp, lastSpectrum):
+ if len(completeAudioArray) < (i + sampleSize):
+ sampleSize = len(completeAudioArray) - i
+ numpy.seterr(divide='ignore')
+ window = numpy.hanning(sampleSize)
+ data = completeAudioArray[i:i+sampleSize][::1] * window
+ paddedSampleSize = 2048
+ paddedData = numpy.pad(data, (0, paddedSampleSize - sampleSize), 'constant')
+ spectrum = numpy.fft.fft(paddedData)
+ sample_rate = 44100
+ frequencies = numpy.fft.fftfreq(len(spectrum), 1./sample_rate)
+
+ y = abs(spectrum[0:int(paddedSampleSize/2) - 1])
+
+ # filter the noise away
+ # y[y<80] = 0
+
+ y = 20 * numpy.log10(y)
+ y[numpy.isinf(y)] = 0
+
+ if lastSpectrum is not None:
+ lastSpectrum[y < lastSpectrum] = y[y < lastSpectrum] * smoothConstantDown + lastSpectrum[y < lastSpectrum] * (1 - smoothConstantDown)
+ lastSpectrum[y >= lastSpectrum] = y[y >= lastSpectrum] * smoothConstantUp + lastSpectrum[y >= lastSpectrum] * (1 - smoothConstantUp)
+ else:
+ lastSpectrum = y
+
+ x = frequencies[0:int(paddedSampleSize/2) - 1]
+
+ return lastSpectrum
+
+def drawBars(width, height, spectrum, color, layout):
+ vH = height-height/8
+ bF = width / 64
+ bH = bF / 2
+ bQ = bF / 4
+ imTop = Image.new("RGBA", (width, height),(0,0,0,0))
+ draw = ImageDraw.Draw(imTop)
+ r, g, b = color
+ color2 = (r, g, b, 125)
+
+ bP = height / 1200
+
+ for j in range(0, 63):
+ draw.rectangle((bH + j * bF, vH+bQ, bH + j * bF + bF, vH + bQ - spectrum[j * 4] * bP - bH), fill=color2)
+ draw.rectangle((bH + bQ + j * bF, vH , bH + bQ + j * bF + bH, vH - spectrum[j * 4] * bP), fill=color)
+
+
+ imBottom = imTop.transpose(Image.FLIP_TOP_BOTTOM)
+
+ im = Image.new("RGBA", (width, height),(0,0,0,0))
+
+ if layout == 0:
+ y = 0 - int(height/100*43)
+ im.paste(imTop, (0, y), mask=imTop)
+ y = 0 + int(height/100*43)
+ im.paste(imBottom, (0, y), mask=imBottom)
+
+ if layout == 1:
+ y = 0 + int(height/100*10)
+ im.paste(imTop, (0, y), mask=imTop)
+ y = 0 - int(height/100*10)
+ im.paste(imBottom, (0, y), mask=imBottom)
+
+ if layout == 2:
+ y = 0 + int(height/100*10)
+ im.paste(imTop, (0, y), mask=imTop)
+
+ return im
diff --git a/components/original.ui b/components/original.ui
new file mode 100644
index 0000000..0e6dd98
--- /dev/null
+++ b/components/original.ui
@@ -0,0 +1,92 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 584
+ 169
+
+
+
+ Form
+
+
+
+
+ 10
+ 10
+ 567
+ 29
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Visualizer Layout
+
+
+
+ -
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+ Visualizer Color
+
+
+
+ -
+
+
+
+ 32
+ 32
+
+
+
+
+
+
+
+ 32
+ 32
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/components/text.py b/components/text.py
new file mode 100644
index 0000000..68b02fe
--- /dev/null
+++ b/components/text.py
@@ -0,0 +1,59 @@
+''' Title Text '''
+import numpy
+from PIL import Image, ImageDraw
+from PyQt4 import uic
+import os
+
+
+class Component:
+ def widget(self,parent):
+ page = uic.loadUi(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'text.ui'))
+ return page
+ def previewRender(self, previewWorker, widget):
+ width = int(previewWorker.core.settings.value('outputWidth'))
+ height = int(previewWorker.core.settings.value('outputHeight'))
+ im = Image.new("RGBA", (width, height),(0,0,0,0))
+
+ return im
+
+ def preFrameRender(self, **kwargs):
+ pass
+ def frameRender(self, moduleNo, frameNo):
+ width = int(previewWorker.core.settings.value('outputWidth'))
+ height = int(previewWorker.core.settings.value('outputHeight'))
+ im = Image.new("RGBA", (width, height),(0,0,0,0))
+
+ return im
+
+ '''
+ self._image = ImageQt(im)
+
+ self._image1 = QtGui.QImage(self._image)
+ painter = QPainter(self._image1)
+ font = titleFont
+ font.setPixelSize(fontSize)
+ painter.setFont(font)
+ painter.setPen(QColor(*textColor))
+
+ yPosition = yOffset
+
+ fm = QtGui.QFontMetrics(font)
+ if alignment == 0: #Left
+ xPosition = xOffset
+ if alignment == 1: #Middle
+ xPosition = xOffset - fm.width(titleText)/2
+ if alignment == 2: #Right
+ xPosition = xOffset - fm.width(titleText)
+ painter.drawText(xPosition, yPosition, titleText)
+ painter.end()
+
+ buffer = QtCore.QBuffer()
+ buffer.open(QtCore.QIODevice.ReadWrite)
+ self._image1.save(buffer, "PNG")
+
+ strio = io.BytesIO()
+ strio.write(buffer.data())
+ buffer.close()
+ strio.seek(0)
+ return Image.open(strio)
+ '''
diff --git a/components/text.ui b/components/text.ui
new file mode 100644
index 0000000..4431278
--- /dev/null
+++ b/components/text.ui
@@ -0,0 +1,329 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 584
+ 169
+
+
+
+ Form
+
+
+
+
+ 10
+ 20
+ 567
+ 25
+
+
+
+
+ 0
+
+ -
+
+
+ Title
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 300
+ 0
+
+
+
+ Testing New GUI
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ X
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 80
+ 16777215
+
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+ 999999999
+
+
+ 0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Y
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 80
+ 16777215
+
+
+
+ 999999999
+
+
+
+
+
+
+
+
+ 10
+ 51
+ 567
+ 29
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Font
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 140
+ 0
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Font Size
+
+
+
+ -
+
+
+ 500
+
+
+
+
+
+
+
+
+ 10
+ 86
+ 567
+ 29
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Text Layout
+
+
+
+ -
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 5
+ 20
+
+
+
+
+ -
+
+
+ Text Color
+
+
+
+ -
+
+
+
+ 32
+ 32
+
+
+
+
+
+
+
+ 32
+ 32
+
+
+
+
+ -
+
+
+
+
+
+
+
+ 10
+ 121
+ 567
+ 29
+
+
+
+
+
+
+
+
--
cgit v1.2.3