aboutsummaryrefslogtreecommitdiff
path: root/src/components/sound.py
blob: d3589b343812f350855c9aa9c55c24683af0b8c3 (plain)
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
72
73
74
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 self.frameRender(self.compPos, 0)

    def preFrameRender(self, **kwargs):
        # super().preFrameRender(**kwargs)
        return ['static', 'audio']

    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.core.settings.value('outputWidth'))
        height = int(self.core.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 {
            'preset': self.currentPreset,
            '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)