85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
from PyQt5 import QtGui, QtCore, QtWidgets
|
|
import os
|
|
|
|
from component import Component
|
|
from frame import BlankFrame
|
|
|
|
|
|
class Component(Component):
|
|
'''Sound'''
|
|
|
|
modified = QtCore.pyqtSignal(int, dict)
|
|
|
|
def widget(self, parent):
|
|
self.parent = parent
|
|
self.settings = parent.settings
|
|
page = self.loadUi('sound.ui')
|
|
|
|
page.lineEdit_sound.textChanged.connect(self.update)
|
|
page.pushButton_sound.clicked.connect(self.pickSound)
|
|
|
|
self.page = page
|
|
return page
|
|
|
|
def update(self):
|
|
self.sound = self.page.lineEdit_sound.text()
|
|
super().update()
|
|
|
|
def previewRender(self, previewWorker):
|
|
width = int(previewWorker.core.settings.value('outputWidth'))
|
|
height = int(previewWorker.core.settings.value('outputHeight'))
|
|
return BlankFrame(width, height)
|
|
|
|
def preFrameRender(self, **kwargs):
|
|
pass
|
|
|
|
def properties(self):
|
|
props = ['static', 'audio']
|
|
if not os.path.exists(self.sound):
|
|
props.append('error')
|
|
return props
|
|
|
|
def error(self):
|
|
if not self.sound:
|
|
return "No audio file selected."
|
|
if not os.path.exists(self.sound):
|
|
return "The audio file selected no longer exists!"
|
|
|
|
def audio(self):
|
|
return (self.sound, {})
|
|
|
|
def pickSound(self):
|
|
sndDir = self.settings.value("componentDir", os.path.expanduser("~"))
|
|
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
|
self.page, "Choose Sound", sndDir,
|
|
"Audio Files (%s)" % " ".join(self.core.audioFormats))
|
|
if filename:
|
|
self.settings.setValue("componentDir", os.path.dirname(filename))
|
|
self.page.lineEdit_sound.setText(filename)
|
|
self.update()
|
|
|
|
def frameRender(self, layerNo, frameNo):
|
|
width = int(self.settings.value('outputWidth'))
|
|
height = int(self.settings.value('outputHeight'))
|
|
return BlankFrame(width, height)
|
|
|
|
def loadPreset(self, pr, presetName=None):
|
|
super().loadPreset(pr, presetName)
|
|
self.page.lineEdit_sound.setText(pr['sound'])
|
|
|
|
def savePreset(self):
|
|
return {
|
|
'sound': self.sound,
|
|
}
|
|
|
|
def commandHelp(self):
|
|
print('Path to audio file:\n path=/filepath/to/sound.ogg')
|
|
|
|
def command(self, arg):
|
|
if not arg.startswith('preset=') and '=' in arg:
|
|
key, arg = arg.split('=', 1)
|
|
if key == 'path':
|
|
self.page.lineEdit_sound.setText(arg)
|
|
return
|
|
super().command(arg)
|