New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Provide xesam:asText
in MPRIS
#202
Comments
这个实现是不是不太对劲……我的理解是当前一句的歌词而不是完整的歌词,不然歌词显示器就完全没办法做了…… |
我倒觉得应该推送这首歌的原始歌词内容(包含每句歌词的时间信息),而不是解析后的纯歌词文本 显示方可以进行解析,然后根据时间定位显示某句歌词 |
我几乎没有在互联网上找到这个字段更详细的说明,并不反对推送包含时间信息的完整歌词的做法(尽管并没有任何标准规范时间信息应以何种方式传递),或许我们可以考虑使用自定义字段例如 |
可以的,主要是因为文档里也没有详细的描述,就安装自己理解做了 可以在xesam:asText字段提供接口返回的原始歌词(带时间戳),配合播放位置就可以获取当前歌词了,也基本不需要额外的实现。 |
@Cryolitia 请查看#216 |
我的建议是在 或是至少在 |
按照文档的描述:
应该是在 |
不是很行,更新 |
不应该使用单行歌词进行更新,太频繁了,应该只在播放器发生状态变更时才进行更新。 另外歌词文件都是有标准格式的,不同语言也有对应的解析器实现 |
import pylrc
import time
import subprocess
fmt = "playerctl --player=musicfox metadata --format '{}'"
getoutput = lambda x: subprocess.getoutput(fmt.format(f"{{{{{x}}}}}"))
def search(t, lrc) -> str:
for i in range(len(lrc)):
if lrc[i].time > t:
return lrc[i-1].text
return lrc[-1].text
lrc = ""
trackid = ""
subs = None
longest = 0
def updatelrc():
global lrc, trackid, subs, longest
nid = getoutput("mpris:trackid")
if nid != trackid:
lrc = getoutput("xesam:asText")
trackid = getoutput("mpris:trackid")
subs = pylrc.parse(lrc)
longest = max(map(lambda x: len(x.text.encode()), subs))
updatelrc()
while True:
updatelrc()
t = int(getoutput("position")) / 1e6
line = search(t, subs)
print(line + (longest - len(line.encode())) * " ", end="\r")
time.sleep(0.1) 可以参考这个程序 |
I don't know if we could add a property |
按mpris文档里,position是只读的,是不是意味着这个调用没什么作用 |
并不是,这种方式是能够正常更新position的 |
Implemented in v4.4.0 |
Check for existing issues
检查是否已存在相同issue
Describe the feature
描述你的新功能
There's a filed in MPRIS v2 metadata guidelines that called
xesam:asText
, which could provide the track lyrics.The text was updated successfully, but these errors were encountered: