Documentation Index
Fetch the complete documentation index at: https://mintlify.com/bbplayer-app/BBPlayer/llms.txt
Use this file to discover all available pages before exploring further.
SPL Format Specification
SPL (Salt Player Lyric) is an advanced lyric format based on LRC that extends it with word-level timing support, multiple translations, and enhanced timing control.Format Overview
SPL is backward compatible with LRC while adding new features:- ✅ All valid LRC files are valid SPL files
- ✅ Word-level timing using
<mm:ss.SSS>tags - ✅ Multiple translations with repeated timestamps
- ✅ Explicit end times for precise control
- ✅ Supports both square brackets
[...]and angle brackets<...>for timestamps
Basic Syntax
Standard LRC Format
SPL supports all standard LRC features:Metadata Tags
Metadata tags use the format[key:value]:
| Tag | Description | Example |
|---|---|---|
ti | Title | [ti:Bohemian Rhapsody] |
ar | Artist | [ar:Queen] |
al | Album | [al:A Night at the Opera] |
by | Creator | [by:Freddie Mercury] |
offset | Time offset (ms) | [offset:+500] |
Time Stamps
Time stamps use the format[mm:ss.SSS]:
- Minutes: 1-3 digits (e.g.,
00,5,120) - Seconds: 1-2 digits (e.g.,
00,5,59) - Milliseconds: 1-6 digits (e.g.,
0,123,123456)
The parser automatically normalizes timestamps to milliseconds internally.
Advanced Features
Word-Level Timing (Dynamic Lyrics)
SPL’s most powerful feature is word-level timing using angle brackets<mm:ss.SSS>:
- “Hello”: 12.00s - 12.50s (500ms duration)
- ” World”: 12.50s - 13.00s (500ms duration)
- Line ends at 13.00s (explicit end time)
Parsing Rules
- Line start time is set by the leading
[mm:ss.SSS]tag - Word start times are set by inline
<mm:ss.SSS>tags - Word end times are inferred from the next timestamp
- Line end time is the last timestamp if followed by no text
Implicit vs Explicit End Times
Implicit End Time
If a line has trailing text after the last timestamp, the end time is inferred:- Line 1 ends at 15.00s (start of next line)
- If no next line exists, defaults to +10 seconds
Explicit End Time
If the last timestamp has no following text, it’s treated as an explicit end:- Line 1 explicitly ends at 13.00s
- Gap between 13.00s and 15.00s (instrumental break)
Multiple Translations
SPL supports multiple translation lines per timestamp:Explicit Translation (Same Timestamp)
Implicit Translation (No Timestamp)
Lines without timestamps are attached to the previous timestamped line:Repeated Lines
Multiple timestamps on one line create repeated entries:LyricLine objects:
Repeated Lines with Implicit Translation
Complete Example
Edge Cases
Negative Timestamps
Negative timestamps are clamped to 0:Backward Time Tags
Time tags that go backward are ignored with a warning:<00:11.00> tag is ignored since it’s before the current time.
Orphaned Text
Text without any timestamp (and not following a timestamped line) throws an error:SplParseError: 第 1 行解析错误: 未找到时间戳,且无法关联到上一行
Empty Lines
Empty lines and whitespace-only lines are ignored:Validation
Use theverify function to validate SPL content:
Best Practices
For Static Lyrics (LRC)
For Dynamic Lyrics (Word-by-Word)
Always include explicit end tags
<mm:ss.SSS> for word-level lyrics to avoid relying on inferred timing.