Swiftpack.co - ddddxxx/LyricsKit as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ddddxxx.
ddddxxx/LyricsKit v0.11.3
Lyrics submodule for LyricsX
⭐️ 69
🕓 15 weeks ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/ddddxxx/LyricsKit.git", from: "v0.11.3")


Lyrics submodule for LyricsX.

Supported Sources

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


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


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

LRCX file


<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


Stars: 69
Last commit: 14 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics