[+] Progress callback for lyrics
This commit is contained in:
@@ -254,8 +254,13 @@ export async function aiParseLyricsRaw(raw: string, tries: number = 5): Promise<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function aiParseLyrics(raw: string): Promise<LyricLine[]> {
|
/**
|
||||||
// Split into maximum n lines per request
|
* Separate the raw lyrics into chunks and let AI parse each chunk, then combine the results.
|
||||||
|
* @param raw The raw lyrics text in LRC format.
|
||||||
|
* @param onProgress Optional progress callback that tracks completed/total chunks.
|
||||||
|
* @returns Processed lyrics as LyricLine[].
|
||||||
|
*/
|
||||||
|
export async function aiParseLyrics(raw: string, onProgress?: (completed: number, total: number) => void): Promise<LyricLine[]> {
|
||||||
const maxLines = 30
|
const maxLines = 30
|
||||||
const lines = raw.split('\n').filter(line => line.trim() !== '')
|
const lines = raw.split('\n').filter(line => line.trim() !== '')
|
||||||
if (lines.length === 0) return []
|
if (lines.length === 0) return []
|
||||||
@@ -267,6 +272,16 @@ export async function aiParseLyrics(raw: string): Promise<LyricLine[]> {
|
|||||||
for (let i = 0; i < lines.length; i += linesPerChunk) {
|
for (let i = 0; i < lines.length; i += linesPerChunk) {
|
||||||
chunks.push(lines.slice(i, i + linesPerChunk).join('\n'))
|
chunks.push(lines.slice(i, i + linesPerChunk).join('\n'))
|
||||||
}
|
}
|
||||||
const results = await Promise.all(chunks.map(it => aiParseLyricsRaw(it, 5)))
|
|
||||||
|
console.log(`Split lyrics into ${chunks.length} chunks for AI processing.`)
|
||||||
|
let completed = 0
|
||||||
|
if (onProgress) onProgress(0, chunks.length)
|
||||||
|
|
||||||
|
const results = await Promise.all(chunks.map(async it => {
|
||||||
|
const res = await aiParseLyricsRaw(it, 5)
|
||||||
|
completed++
|
||||||
|
if (onProgress) onProgress(completed, chunks.length)
|
||||||
|
return res
|
||||||
|
}))
|
||||||
return results.flat()
|
return results.flat()
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user