forked from Keelrleek/SoulStream
dj sets + lyrics: a mix that names its own tracks, and words pulled off the separated voice
This commit is contained in:
1 parent
4efe85b6bf
commit
1dd8573808
41 files changed
+9288
-647
No files matched your search
+42
-4
@@ -73,7 +73,8 @@ export const showInFolder = (path) => invoke("show_in_folder", { path });
|
||||
export const refreshArtistArt = () => invoke("refresh_artist_art");
|
||||
export const playStream = (username, path, size, duration) =>
|
||||
invoke("play_stream", { username, path, size, duration });
|
||||
export const playLocal = (path, duration) => invoke("play_local", { path, duration });
|
||||
export const playLocal = (path, duration, startSecs = null) =>
|
||||
invoke("play_local", { path, duration, startSecs });
|
||||
export const preloadLocal = (path, duration) => invoke("preload_local", { path, duration });
|
||||
export const playerControl = (action, value, rate) =>
|
||||
invoke("player_control", { action, value: value ?? null, rate: rate ?? null });
|
||||
@@ -81,7 +82,8 @@ export const playerControl = (action, value, rate) =>
|
||||
// playback from events, so after a reload this is the only way to find out that
|
||||
// audio is still running — see `restoreSession`.
|
||||
export const playerState = () => invoke("player_state");
|
||||
export const waveform = (path, buckets) => invoke("waveform", { path, buckets });
|
||||
export const waveform = (path, buckets, startSecs = null, endSecs = null) =>
|
||||
invoke("waveform", { path, buckets, startSecs, endSecs });
|
||||
export const libraryAlbums = () => invoke("library_albums");
|
||||
export const libraryAlbumStats = (minSecs) => invoke("library_album_stats", { minSecs });
|
||||
export const albumTracks = (albumId) => invoke("album_tracks", { albumId });
|
||||
@@ -170,6 +172,8 @@ export const playlistRelinkItem = (playlistId, itemId, fields = {}) =>
|
||||
durationSecs: fields.durationSecs ?? null,
|
||||
path: fields.path ?? null,
|
||||
artPath: fields.artPath ?? null,
|
||||
trackId: fields.trackId ?? null,
|
||||
artUrl: fields.artUrl ?? null,
|
||||
});
|
||||
// Cover as a data URL: custom master, else composed mosaic, else null.
|
||||
export const playlistCover = (id, maxEdge = null) =>
|
||||
@@ -181,11 +185,44 @@ export const playlistCoverClear = (id) => invoke("playlist_cover_clear", { id })
|
||||
export const playlistImportProbe = () => invoke("playlist_import_probe");
|
||||
export const playlistImportFolder = () => invoke("playlist_import_folder");
|
||||
export const playlistImportText = (text) => invoke("playlist_import_text", { text });
|
||||
export const playlistImportCommit = (name, description, kind, entries) =>
|
||||
invoke("playlist_import_commit", { name, description: description ?? null, kind, entries });
|
||||
export const playlistImportYoutube = (url) => invoke("playlist_import_youtube", { url });
|
||||
// The set LISTENER (src-tauri/src/setlist_scan.rs + ytdlp.rs): recognize a
|
||||
// mix's tracks from its audio. Progress rides "playlist:scan-progress".
|
||||
export const playlistScanYoutube = (url) => invoke("playlist_scan_youtube", { url });
|
||||
// The local door is split pick/scan so the modal can collect an optional
|
||||
// pasted tracklist between the two.
|
||||
export const playlistPickSetFile = () => invoke("playlist_pick_set_file");
|
||||
export const playlistScanFile = (path, tracklist = null) =>
|
||||
invoke("playlist_scan_file", { path, tracklist });
|
||||
export const playlistScanCancel = () => invoke("playlist_scan_cancel");
|
||||
export const ytdlpStatus = () => invoke("ytdlp_status");
|
||||
export const ytdlpDownload = () => invoke("ytdlp_download");
|
||||
export const denoDownload = () => invoke("deno_download");
|
||||
export const playlistImportCommit = (name, description, kind, entries, coverUrl = null) =>
|
||||
invoke("playlist_import_commit", {
|
||||
name,
|
||||
description: description ?? null,
|
||||
kind,
|
||||
entries,
|
||||
coverUrl,
|
||||
});
|
||||
// Export via a save dialog; format ∈ m3u8 | xspf | csv | json. Resolves to
|
||||
// the written path, or null when the dialog was cancelled.
|
||||
export const playlistExport = (id, format) => invoke("playlist_export", { id, format });
|
||||
|
||||
// ---- lyric word-timing preparation (src-tauri/src/lyric_prep.rs) ----------
|
||||
export const lyricModelStatus = () => invoke("lyric_model_status");
|
||||
export const lyricModelDownload = () => invoke("lyric_model_download");
|
||||
// Vocal separation model (src-tauri/src/vocal_sep.rs) — the ctc-v5 stem tier.
|
||||
export const vocalSepStatus = () => invoke("vocal_sep_status");
|
||||
export const vocalSepDownload = () => invoke("vocal_sep_download");
|
||||
export const lyricPrepRequest = (path, durationSecs, lines, stream = null) =>
|
||||
invoke("lyric_prep_request", {
|
||||
path: path ?? null,
|
||||
stream,
|
||||
durationSecs: durationSecs ?? null,
|
||||
lines,
|
||||
});
|
||||
// Local-library candidates for the unresolved-row repair panel.
|
||||
export const libraryTrackSearch = (query) => invoke("library_track_search", { query });
|
||||
|
||||
@@ -220,6 +257,7 @@ export const lyricsVocalActivity = (path) => invoke("lyrics_vocal_activity", { p
|
||||
export const lyricsSaveLines = (title, artist, durationSecs, lines) =>
|
||||
invoke("lyrics_save_lines", { title, artist, durationSecs: durationSecs ?? null, lines });
|
||||
export const catalogSearch = (query) => invoke("catalog_search", { query });
|
||||
export const catalogTrackByIsrc = (isrc) => invoke("catalog_track_by_isrc", { isrc });
|
||||
export const rememberFusedArtistPortrait = (artistId, portrait) =>
|
||||
invoke("remember_fused_artist_portrait", { artistId, portrait });
|
||||
export const catalogArtist = (artistId) => checkedArtistPayload("catalog_artist", artistId);
|
||||
|
||||
Reference in new issue
Block a user