• Stars
    star
    109
  • Rank 319,077 (Top 7 %)
  • Language
    Swift
  • License
    Mozilla Public Li...
  • Created over 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Lyrics submodule for LyricsX

LyricsKit

Lyrics submodule for LyricsX.

Supported Sources

  • NetEase Music
  • QQ Music
  • Kugou Music
  • TTPod
  • Gecimi
  • Syair
  • Xiami Music (discontinued)
  • ViewLyrics (not working anymore)

Usage

Search lyrics from the internet

import LyricsService

// create a search request
let song = "Tranquilize"
let artist = "The Killers"
let duration = 225.2
let searchReq = LyricsSearchRequest(
    searchTerm: .info(title: song, artist: artist),
    duration: duration
)

// choose a lyrics service provider
let provider = LyricsProviders.Kugou()
// or search from multiple sources
let provider = LyricsProviders.Group(service: [.kugou, .netease, .qq])

// search
provider.lyricsPublisher(request: searchReq).sink { lyrics in
    print(lyrics)
}

License

LyricsKit is part of LyricsX and licensed under MPL 2.0. See the LICENSE file.

LRCX file

Specification

<lrcx>              ::= <line> (NEWLINE <line>)*
<line>              ::= <id tag>
                      | <lyric line>
                      | <lyric attachment>
                      | ""

<id tag>            ::= <tag>
<tag>               ::= "[" <tag content> "]"
<tag content>       ::= <tag key>
                      | <tag key> ":" <tag value>
<tag key>           ::= [0-9a-zA-Z_-]+
<tag value>         ::= <character except NEWLINE or "]">+

<lyric line>        ::= <time tag> <character except NEWLINE>*
<lyric attachment>  ::= <time tag> <attachment tag> <attachment body>

<time tag>          ::= "[" (<minute> ":")* <second> ("." <millisecond>)* "]"

<attachment tag>            ::= <tag>
<attachment body>           ::= <plain text attachment>
                              | <index based attachment>
                              | <range based attachment>
<plain text attachment>     ::= <character except NEWLINE>+
<index based attachment>    ::= <index based segment>+
<range based attachment>    ::= <range based segment>+
<index based segment>       ::= "<" <segment value> "," <segment index> ">"
<range based segment>       ::= "<" <segment value> "," <segment range> ">"
<segment value>             ::= <characters except NEWLINE, "," or ">">
<segment index>             ::= <number>
<segment range>             ::= <lowerBound> "," <upperBound>

Predefined tags

Predefined ID tags:

Tag Key Value Type Description
title ti string
album al string
artist ar string
offset offset integer
length length decimal

Predefind attachment tags:

Tag Key Value Type Attachment type Description
translation tr RFC 4646 plain text
word time tag tt no value index based (with timestamp in millisecond)
furigana fu no value range based
romaji ro no value range based