-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbluemedia.py
More file actions
73 lines (61 loc) · 2.47 KB
/
Copy pathbluemedia.py
File metadata and controls
73 lines (61 loc) · 2.47 KB
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
import dbus
import dbus.mainloop.glib
import dbus.service
from gi.repository import GLib
class BluetoothMediaController(dbus.service.Object):
def __init__(self, device_address):
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
dbus.service.Object.__init__(self, dbus.SystemBus(), "/org/bluez")
self.bus = dbus.SystemBus()
self.device_path = f"/org/bluez/hci0/dev_{device_address.replace(':', '_')}"
self.player_path = None
self._find_player()
def _find_player(self):
obj_manager = dbus.Interface(self.bus.get_object('org.bluez', '/'), 'org.freedesktop.DBus.ObjectManager')
objects = obj_manager.GetManagedObjects()
for path, interfaces in objects.items():
if 'org.bluez.MediaPlayer1' in interfaces and path.startswith(self.device_path):
self.player_path = path
break
def play(self):
player = self._get_player_interface()
if player:
player.Play()
def pause(self):
player = self._get_player_interface()
if player:
player.Pause()
def next(self):
player = self._get_player_interface()
if player:
player.Next()
def previous(self):
player = self._get_player_interface()
if player:
player.Previous()
def get_current_track(self):
player = self._get_player_interface()
if player:
properties = dbus.Interface(player, 'org.freedesktop.DBus.Properties')
metadata = properties.Get('org.bluez.MediaPlayer1', 'Track')
return {
'title': metadata.get('Title', 'Unknown'),
'artist': metadata.get('Artist', 'Unknown'),
'album': metadata.get('Album', 'Unknown')
}
def _get_player_interface(self):
if self.player_path:
obj = self.bus.get_object('org.bluez', self.player_path)
iface = dbus.Interface(obj, 'org.bluez.MediaPlayer1')
return iface
if __name__ == "__main__":
device_address = '00:00:00:00:00:00'
controller = BluetoothMediaController(device_address)
loop = GLib.MainLoop()
# Example usage:
controller.play()
GLib.timeout_add_seconds(5, controller.pause)
track_info = controller.get_current_track()
print(f"Currently playing: {track_info['title']} by {track_info['artist']} from the album {track_info['album']}")
GLib.timeout_add_seconds(10, loop.quit)
loop.run()