Work on sound positioning for objects. Enable in sounds in preferences.

This commit is contained in:
Storm Dragon
2026-05-08 07:41:44 -04:00
parent 6f33caade1
commit a5f7c9a8f3
13 changed files with 304 additions and 30 deletions
+28 -6
View File
@@ -20,36 +20,48 @@ class _FakePlaybin:
class SoundHelperBackendTests(unittest.TestCase):
def test_create_file_player_uses_playbin_default_sink_for_auto(self):
fakePlaybin = _FakePlaybin()
fakePanorama = object()
with (
mock.patch.object(
sound_helper.Gst.ElementFactory,
"make",
return_value=fakePlaybin,
side_effect=[fakePlaybin, fakePanorama],
) as makeElement,
mock.patch.object(
sound_helper.sound_sink,
"create_audio_sink",
) as createAudioSink,
):
player, sinkName, error = sound_helper._create_file_player("worker-file", settings.SOUND_SINK_AUTO)
player, panorama, sinkName, error = sound_helper._create_file_player(
"worker-file",
settings.SOUND_SINK_AUTO,
)
self.assertIs(player, fakePlaybin)
self.assertIs(panorama, fakePanorama)
self.assertEqual(sinkName, "playbin-default")
self.assertIsNone(error)
createAudioSink.assert_not_called()
makeElement.assert_called_once_with("playbin", "worker-file")
makeElement.assert_has_calls(
[
mock.call("playbin", "worker-file"),
mock.call("audiopanorama", "worker-file-panorama"),
]
)
self.assertNotIn("audio-sink", fakePlaybin.properties)
self.assertIs(fakePlaybin.properties["audio-filter"], fakePanorama)
def test_create_file_player_sets_explicit_sink_when_requested(self):
fakePlaybin = _FakePlaybin()
fakePanorama = object()
fakeSink = object()
with (
mock.patch.object(
sound_helper.Gst.ElementFactory,
"make",
return_value=fakePlaybin,
side_effect=[fakePlaybin, fakePanorama],
) as makeElement,
mock.patch.object(
sound_helper.sound_sink,
@@ -57,14 +69,24 @@ class SoundHelperBackendTests(unittest.TestCase):
return_value=(fakeSink, "pulsesink", None),
) as createAudioSink,
):
player, sinkName, error = sound_helper._create_file_player("worker-file", settings.SOUND_SINK_PULSE)
player, panorama, sinkName, error = sound_helper._create_file_player(
"worker-file",
settings.SOUND_SINK_PULSE,
)
self.assertIs(player, fakePlaybin)
self.assertIs(panorama, fakePanorama)
self.assertEqual(sinkName, "pulsesink")
self.assertIsNone(error)
makeElement.assert_called_once_with("playbin", "worker-file")
makeElement.assert_has_calls(
[
mock.call("playbin", "worker-file"),
mock.call("audiopanorama", "worker-file-panorama"),
]
)
createAudioSink.assert_called_once()
self.assertIs(fakePlaybin.properties["audio-sink"], fakeSink)
self.assertIs(fakePlaybin.properties["audio-filter"], fakePanorama)
if __name__ == "__main__":