audio: Give the BassPlayer a volume property
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
fa2cbcc261
commit
51e8bc295d
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import lib
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
from gi.repository import Gst
|
||||
|
@ -6,9 +7,12 @@ from gi.repository import Gst
|
|||
class BassPlayer(GObject.GObject):
|
||||
def __init__(self):
|
||||
GObject.GObject.__init__(self)
|
||||
lib.settings.initialize("audio.volume", 1.0)
|
||||
|
||||
self.video = Gst.ElementFactory.make("fakesink")
|
||||
self.playbin = Gst.ElementFactory.make("playbin")
|
||||
self.playbin.set_property("video-sink", self.video)
|
||||
self.playbin.set_property("volume", lib.settings.get_float("audio.volume"))
|
||||
self.playbin.set_state(Gst.State.READY)
|
||||
|
||||
self.bus.add_signal_watch()
|
||||
|
@ -59,6 +63,15 @@ class BassPlayer(GObject.GObject):
|
|||
else:
|
||||
self.playbin.set_state(Gst.State.READY)
|
||||
|
||||
@GObject.Property
|
||||
def volume(self):
|
||||
return self.playbin.get_property("volume")
|
||||
|
||||
@volume.setter
|
||||
def volume(self, vol):
|
||||
self.playbin.set_property("volume", vol)
|
||||
lib.settings.set("audio.volume", vol)
|
||||
|
||||
def state_changed(self, bus, message):
|
||||
if message.src == self.playbin:
|
||||
(old, new, pending) = message.parse_state_changed()
|
||||
|
|
|
@ -31,9 +31,6 @@ class Player(bass.BassPlayer):
|
|||
return state
|
||||
return ret
|
||||
|
||||
def get_volume(self):
|
||||
return self.playbin.get_property("volume")
|
||||
|
||||
def load_track(self, track):
|
||||
prev = self.track
|
||||
self.track = track
|
||||
|
@ -83,9 +80,6 @@ class Player(bass.BassPlayer):
|
|||
return 0
|
||||
return self.playbin.clock.get_time() - self.playbin.base_time
|
||||
|
||||
def set_volume(self, volume):
|
||||
self.playbin.set_property("volume", volume)
|
||||
|
||||
@GObject.Signal(arg_types=(tagdb.track.Track, tagdb.track.Track))
|
||||
def track_changed(self, prev, new):
|
||||
pass
|
||||
|
|
|
@ -79,11 +79,11 @@ class VolumeScale(ScalePlus):
|
|||
def __init__(self, player):
|
||||
ScalePlus.__init__(self, 0.0, 1.0, 0.05, 0.25)
|
||||
self.player = player
|
||||
self.set_value(player.get_volume())
|
||||
self.set_value(player.volume)
|
||||
|
||||
def do_change_value(self, scroll, value):
|
||||
self.set_value(value)
|
||||
self.player.set_volume(value)
|
||||
self.player.volume = value
|
||||
|
||||
def format_value(self, scale, value):
|
||||
return f"{int(value * 100)}%"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import lib
|
||||
import pathlib
|
||||
import time
|
||||
import unittest
|
||||
|
@ -97,3 +98,16 @@ class TestBassPlayer(unittest.TestCase):
|
|||
base.set_property("uri", None)
|
||||
self.assertEqual(base.playbin.get_state(Gst.CLOCK_TIME_NONE)[1],
|
||||
Gst.State.READY)
|
||||
|
||||
def test_bass_player_volume(self):
|
||||
lib.settings.reset()
|
||||
base = bass.BassPlayer()
|
||||
|
||||
self.assertEqual(lib.settings.get_float("audio.volume"), 1.0)
|
||||
self.assertEqual(base.get_property("volume"), 1.0)
|
||||
base.set_property("volume", 0.5)
|
||||
self.assertEqual(base.get_property("volume"), 0.5)
|
||||
self.assertEqual(lib.settings.get_float("audio.volume"), 0.5)
|
||||
|
||||
base2 = bass.BassPlayer()
|
||||
self.assertEqual(base2.get_property("volume"), 0.5)
|
||||
|
|
|
@ -23,7 +23,9 @@ class FakePlayer(GObject.GObject):
|
|||
|
||||
def previous(self): self.prev = True
|
||||
def next(self): self.nxt = True
|
||||
def get_volume(self): return self.vol
|
||||
|
||||
@GObject.Property
|
||||
def volume(self): return self.vol
|
||||
def playpause(self):
|
||||
self.playing = not self.playing
|
||||
|
||||
|
|
|
@ -28,8 +28,11 @@ class FakePlayer(GObject.GObject):
|
|||
def duration_changed(self): pass
|
||||
|
||||
def seek(self, value): self.seek_val = value
|
||||
def set_volume(self, volume): self.vol = volume
|
||||
def get_volume(self): return self.vol
|
||||
|
||||
@GObject.Property
|
||||
def volume(self): return self.vol
|
||||
@volume.setter
|
||||
def volume(self, volume): self.vol = volume
|
||||
|
||||
|
||||
class TestScalePlus(unittest.TestCase):
|
||||
|
@ -165,7 +168,7 @@ class TestVolumeScale(unittest.TestCase):
|
|||
self.assertEqual(adj.get_step_increment(), 0.05)
|
||||
self.assertEqual(adj.get_page_increment(), 0.25)
|
||||
|
||||
fake.set_volume(0.5)
|
||||
fake.volume = 0.5
|
||||
vol2 = scale.VolumeScale(fake)
|
||||
self.assertEqual(vol2.get_value(), 0.5)
|
||||
|
||||
|
@ -174,11 +177,11 @@ class TestVolumeScale(unittest.TestCase):
|
|||
volume = scale.VolumeScale(fake)
|
||||
|
||||
volume.increment()
|
||||
self.assertEqual(fake.get_volume(), 0.55)
|
||||
self.assertEqual(fake.volume, 0.55)
|
||||
self.assertEqual(volume.format_value(volume, 0.55), "55%")
|
||||
|
||||
volume.decrement()
|
||||
self.assertEqual(fake.get_volume(), 0.50)
|
||||
self.assertEqual(fake.volume, 0.50)
|
||||
self.assertEqual(volume.format_value(volume, 0.50), "50%")
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue