audio: Give the BassPlayer a volume property

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-09-05 08:40:41 -04:00
parent fa2cbcc261
commit 51e8bc295d
6 changed files with 40 additions and 14 deletions

View File

@ -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()

View File

@ -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

View File

@ -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)}%"

View File

@ -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)

View File

@ -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

View File

@ -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%")