Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Lyrics rozšíření pro VLC  (Přečteno 993 krát)

Tomtom

  • Návštěvník
  • Příspěvků: 84
Lyrics rozšíření pro VLC
« kdy: 15 Dubna 2012, 16:05:14 »
Zdravím,
máte tip na nějaké lyrics rozšíření pro VLC? (text skladby)

Zkusil jsem dvě rozšíření v lua, co jsou k nalezení na addons.videolan.org
Konkrétně musiXmatch a lyricsmode, ale nejsou zrovna ideální. První zobrazuje jen kus textu, druhý toho moc nenajde. A nastavení žádné.

Díky za nějaký tip.
Debian

Tomtom

  • Návštěvník
  • Příspěvků: 84
Re:Lyrics rozšíření pro VLC
« Odpověď #1 kdy: 15 Dubna 2012, 19:30:07 »
Tak jsem si to udělal sám :) a dávám k dobru.

Je to v lua, vyhledává to na ujdeto.cz a zobrazí text skladby v samostatném okně, podle metatagů (s možností opravy). Drobným problémem je, že většina URL má na konci zkratku jazyka (třeba "en", "de", "cz") a nemám jak ve scriptu zjistit, v jakém jazyce to na webu existuje. Proto je výchozí bez zkratky, a pokud to nic nenajde stačí zkusit přidat za název zkratku podle odhadu jazyka (u anglický písničky "en" a pod.).

Název a jméno interpreta musí být "čistý", jen alfanumerický znaky a mezery(resp. pomlčky), aby se dalo přímo převést na URL.

Je to dostupný z menu "Zobrazit"
Stačí kód níže nakopírovat do:
/usr/lib/vlc/lua/extensions/ujdeto-lyrics.luac
Kód: [Vybrat]
-- start of VLC required functions
dlg = nil
title = nil
artist = nil
lyric = nil

-- VLC Extension Descriptor
function descriptor()
return {
title = "Ujdeto Lyrics";
version = "0.1";
author = "tre";
url = 'n/a';
description = "<center><b>Ujdeto Lyrics</b></center>"
   .. "<br /><b>Gets the lyrics from ujdeto.cz</b>"
       .. "<br /><b>Based on Lyrics Finder by rsyh93</b>"
       .. "<br /><b>(Based on the script made by Jean-Philippe Andre)</b>";
shortdesc = "Get the lyrics from ujdeto.cz";
capabilities = { "input-listener"; "meta-listener" }
}
end

-- Function triggered when the extension is activated
function activate()
vlc.msg.dbg(_VERSION)
vlc.msg.dbg("[Lyrics] Activating")
show_dialog()
return true
end

-- Function triggered when the extension is deactivated
function deactivate()
close()
vlc.msg.dbg("[Lyrics] Deactivated")
return true
end

function new_dialog(title)
dlg=vlc.dialog(title)
end

-- Function triggered when the dialog is closed
function close()
reset_variables()
vlc.deactivate()
end

function show_dialog()
if dlg == nil then
new_dialog("Lyrics Finder")
end

-- column, row, col_span, row_span, width, height

dlg:add_label("Title:", 1, 1, 1, 1)
title = dlg:add_text_input(get_title(), 2, 1, 3, 1)

dlg:add_label("Artist:", 1, 2, 1, 1)
artist = dlg:add_text_input(get_artist(), 2, 2, 3, 1)

dlg:add_button("Update", update_metas, 1, 3, 1, 1)
dlg:add_button("Get Lyrics", click_lyrics_button, 2, 3, 2, 1)
dlg:add_button("Close", close, 4, 3, 1, 1)
lyric = dlg:add_html("", 1,4,4,8)
return true
end

-- Resets Dialog
function reset_variables()
dlg = nil
title = nil
artist = nil
lyric = nil
end

-- Updates Input Fields
function update_metas()
title:set_text(get_title())
artist:set_text(get_artist())

dlg:update()
return true
end
-- end of VLC functions

function get_lyrics(title_x, artist_x)
title_x = trim(title_x)
artist_x = trim(artist_x)

title_x = string.gsub(title_x, " ", "-")
artist_x = string.gsub(artist_x, " ", "-")

title_x = string.lower(title_x)
artist_x = string.lower(artist_x)

local url = "http://www.ujdeto.cz/lyrics/"..artist_x.."/"..title_x.."/"

local s = vlc.stream(url)

if not s then
return ""
end

local data = s:read(65535)
local _,a = string.find(data, [[<p class="ltext">]])
local b,_ = string.find(data, "</p>", a)

return data:sub(a+1,b-1)
end

function click_lyrics_button()
lyric:set_text("LOADING...<br><br>Případně zkus přidat za jméno skladby slovo 'en' ('de', a pod. podle předpokladu jazyka)<br><br>Hledá se přesná URL adresa, a na webu jsou adresy v různém tvaru - některé s vyznačeným jazykem, některé bez.")
dlg:update()

local songtitle = title:get_text()
local songartist = artist:get_text()
local lyric_string = get_lyrics(songtitle, songartist)

if lyric_string=="" or lyric_string==nil then
lyric:set_text("<i>URL NOT FOUND</i>")
dlg:update()
return false
end

lyric:set_text(lyric_string)
dlg:update()
return true
end

-- Get clean title from filename
function get_title()
    local item = vlc.item or vlc.input.item()
    if not item then
        return ""
    end
    local metas = item:metas()
    if metas["title"] then
        return metas["title"]
    else
        local filename = string.gsub(item:name(), "^(.+)%.%w+$", "%1")
        return trim(filename or item:name())
    end
end

-- Get clean artist from filename
function get_artist()
    local item = vlc.item or vlc.input.item()
    if not item then
        return ""
    end
    local metas = item:metas()
    if metas["artist"] then
        return metas["artist"]
    else
        return ""
    end
end

-- Remove leading and trailing spaces
function trim(str)
    if not str then return "" end
    return string.gsub(str, "^%s*(.-)%s*$", "%1")
end

Úpravy a vylepšování povoleno, ba přímo vyžadováno :D
« Poslední změna: 15 Dubna 2012, 19:49:40 od Tomtom »
Debian

 

Provoz zaštiťuje spolek OpenAlt.