feat: try lipsinck
This commit is contained in:
@@ -138,7 +138,7 @@ const MusicDetails = ({ route }) => {
|
||||
}, [project?.musicTimestamps, project?.songIndex])
|
||||
|
||||
const flatLines = useMemo(() => sections.flatMap((s) => s.lines), [sections])
|
||||
const visibleTimeS = (positionMs || 0) / 1000 + 0.3 // Offset de 300ms pour fluidité visuelle
|
||||
const visibleTimeS = (positionMs || 0) / 1000
|
||||
|
||||
const currentLineIdx = useMemo(() => {
|
||||
if (!flatLines.length) return -1
|
||||
@@ -414,4 +414,4 @@ const styles = StyleSheet.create({
|
||||
textTransform: 'uppercase',
|
||||
marginBottom: 6,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
@@ -548,8 +548,7 @@ const MusicDetails = ({ route }) => {
|
||||
|
||||
// Current time in seconds for highlighting
|
||||
const currentTimeS = useMemo(() => Math.max(0, (positionMs || 0) / 1000), [positionMs])
|
||||
// Preview lead: show words 0.5s earlier
|
||||
const visibleTimeS = useMemo(() => Math.max(0, currentTimeS + 0.5), [currentTimeS])
|
||||
const visibleTimeS = currentTimeS
|
||||
// Helpers to group aligned words into sections and timed lines
|
||||
const SECTION_TAG_REGEX = /^\s*\[([^\]]+)\]\s*$/i
|
||||
const SECTION_TAG_LEADING_REGEX = /^\s*\[([^\]]+)\]\s*/i
|
||||
|
||||
@@ -148,6 +148,13 @@ const ComposeSong = () => {
|
||||
|
||||
if (!isRegenerationFlow) {
|
||||
payload.musicUrls = firebase.firestore.FieldValue.delete()
|
||||
payload.musicAudioIds = firebase.firestore.FieldValue.delete()
|
||||
payload.musicDurations = firebase.firestore.FieldValue.delete()
|
||||
payload.musicTaskIds = firebase.firestore.FieldValue.delete()
|
||||
payload.musicTimestamps = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncStatus = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncError = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncDiagnostics = firebase.firestore.FieldValue.delete()
|
||||
}
|
||||
|
||||
await updateProjectData(payload)
|
||||
|
||||
@@ -204,6 +204,13 @@ const ComposeSong = () => {
|
||||
|
||||
if (!isRegenerationFlow) {
|
||||
payload.musicUrls = firebase.firestore.FieldValue.delete()
|
||||
payload.musicAudioIds = firebase.firestore.FieldValue.delete()
|
||||
payload.musicDurations = firebase.firestore.FieldValue.delete()
|
||||
payload.musicTaskIds = firebase.firestore.FieldValue.delete()
|
||||
payload.musicTimestamps = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncStatus = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncError = firebase.firestore.FieldValue.delete()
|
||||
payload.lyricsSyncDiagnostics = firebase.firestore.FieldValue.delete()
|
||||
}
|
||||
|
||||
await updateProjectData(payload)
|
||||
|
||||
@@ -118,6 +118,10 @@ const SongReady = () => {
|
||||
await updateProjectData({
|
||||
songIndex: selectedIndex,
|
||||
songUrl: url,
|
||||
sunoAudioId: selectedProject?.musicAudioIds?.[selectedIndex] || null,
|
||||
songSunoTaskId: selectedProject?.musicTaskIds?.[selectedIndex] || null,
|
||||
lyricsSyncStatus: 'PENDING',
|
||||
lyricsSyncError: null,
|
||||
cover: null,
|
||||
coverUrl: null,
|
||||
coverStatus: null,
|
||||
|
||||
Reference in New Issue
Block a user