This repository has been archived on 2020-08-22. You can view files and clone it, but cannot push or open issues or pull requests.
pyaudviz/src/components/sound.py

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)