Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
AutoKara
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Wiki externe
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Extraits de code
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de conteneurs
Registre de modèles
Opération
Environnements
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse CI/CD
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté GitLab
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
bakaclub
AutoKara
Validations
4ddf1bed
Valider
4ddf1bed
rédigé
Il y a 1 an
par
Sting
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
Refactor + copy line metadata
parent
15fdd0bc
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion
!4
Lyrics Alignment
Modifications
3
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
3 fichiers modifiés
autokara.py
+12
-10
12 ajouts, 10 suppressions
autokara.py
autosyl/assUtils.py
+25
-15
25 ajouts, 15 suppressions
autosyl/assUtils.py
autosyl/segment.py
+1
-6
1 ajout, 6 suppressions
autosyl/segment.py
avec
38 ajouts
et
31 suppressions
autokara.py
+
12
−
10
Voir le fichier @
4ddf1bed
...
...
@@ -11,9 +11,9 @@ from autosyl.segment import segment
parser
=
argparse
.
ArgumentParser
(
description
=
'
AutoKara - Automatic karaoke timing tool
'
)
parser
.
add_argument
(
"
source_file
"
,
type
=
str
,
help
=
"
The video/audio file to time
"
)
parser
.
add_argument
(
"
ass_file
"
,
type
=
str
,
help
=
"
The ASS file
in wh
ic
h
to
output the karaok
e
"
)
parser
.
add_argument
(
"
ass_file
"
,
type
=
str
,
help
=
"
The ASS file
with lyr
ic
s
to
tim
e
"
)
parser
.
add_argument
(
"
--vocals
"
,
action
=
"
store_true
"
,
help
=
"
Treat the input as vocals file, i.e. do not perform vocals extraction
"
)
parser
.
add_argument
(
"
-
-ref
"
,
help
=
"
Use an ASS file as referenc
e
"
)
parser
.
add_argument
(
"
-
o
"
,
"
--output
"
,
help
=
"
Write output to specified file. If absent, overwrite source fil
e
"
)
args
=
parser
.
parse_args
()
...
...
@@ -40,19 +40,21 @@ if not args.vocals :
else
:
vocals_file
=
args
.
source_file
if
args
.
ref
:
reference_file
=
args
.
ref
else
:
reference_file
=
None
print
(
"
Identifying syl starts...
"
)
syls
=
segment
(
vocals_file
,
reference_file
=
reference_file
)
reference_syls
,
line_meta
=
getSyls
(
ass_file
)
syls
=
segment
(
vocals_file
,
reference_syls
=
reference_syls
)
print
(
syls
)
print
(
line_meta
)
print
(
"
Syls found, writing ASS file...
"
)
header
=
getHeader
(
ass_file
)
writer
=
AssWriter
()
writer
.
openAss
(
ass_file
)
writer
.
writeHeader
(
header
=
getH
eader
(
reference_file
)
)
writer
.
writeSyls
(
syls
)
writer
.
openAss
(
args
.
output
if
args
.
output
else
ass_file
)
writer
.
writeHeader
(
header
=
h
eader
)
writer
.
writeSyls
(
syls
,
line_meta
)
writer
.
closeAss
()
Ce diff est replié.
Cliquez pour l'agrandir.
autosyl/assUtils.py
+
25
−
15
Voir le fichier @
4ddf1bed
...
...
@@ -25,20 +25,28 @@ def dateToTime(date):
def
getSyls
(
ass_file
):
SYLS
=
[]
META
=
[]
with
open
(
ass_file
,
'
r
'
)
as
f
:
CONTENT
=
f
.
read
()
LINES_KARA
=
re
.
compile
(
r
"
Comment:.*(\d+:\d{2}:\d{2}.\d{2}),(\d+:\d{2}:\d{2}.\d{2}),
.*
,karaoke,(.*)\n
"
);
LINES_KARA
=
re
.
compile
(
r
"
Comment:.*(\d+:\d{2}:\d{2}.\d{2}),(\d+:\d{2}:\d{2}.\d{2}),
([^,]*),([^,]*),(\d+),(\d+),(\d+)
,karaoke,(.*)\n
"
);
RGX_TAGS
=
re
.
compile
(
r
"
\{\\k(\d+)\}([^\{\n\r]*)
"
)
for
line
in
LINES_KARA
.
findall
(
CONTENT
):
syl_line
=
[]
lastTime
=
dateToTime
(
line
[
0
])
for
couple
in
RGX_TAGS
.
findall
(
line
[
2
]):
for
couple
in
RGX_TAGS
.
findall
(
line
[
7
]):
if
(
couple
[
1
]
!=
''
and
not
couple
[
1
].
isspace
()):
syl_line
.
append
([
lastTime
,
couple
[
1
],
int
(
couple
[
0
])])
lastTime
+=
int
(
couple
[
0
])
syl_line
.
append
([
lastTime
,
''
,
0
])
SYLS
.
append
(
syl_line
)
return
SYLS
line_meta
=
{}
line_meta
[
'
stylename
'
]
=
line
[
2
]
line_meta
[
'
actor
'
]
=
line
[
3
]
line_meta
[
'
margin_l
'
]
=
int
(
line
[
4
])
line_meta
[
'
margin_r
'
]
=
int
(
line
[
5
])
line_meta
[
'
margin_v
'
]
=
int
(
line
[
6
])
META
.
append
(
line_meta
)
return
SYLS
,
META
def
getHeader
(
ass_file
):
...
...
@@ -106,16 +114,18 @@ Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
'''
self
.
file
.
write
(
header
)
def
writeSyls
(
self
,
syl_timings
):
bottom
=
False
for
syl_line
in
syl_timings
:
start_time
=
timeToDate
(
syl_line
[
0
][
0
])
end_time
=
timeToDate
(
syl_line
[
-
1
][
0
])
v_margin
=
(
150
if
bottom
else
50
)
line
=
f
'
Dialogue: 0,
{
start_time
}
,
{
end_time
}
,Default,,0,0,
{
v_margin
:
d
}
,,
'
for
i
in
range
(
len
(
syl_line
)
-
1
):
syl_dur
=
round
((
syl_line
[
i
+
1
][
0
]
-
syl_line
[
i
][
0
])
*
100
)
line
+=
f
'
{{\k
{
syl_dur
:
d
}
}}
{
syl_line
[
i
][
1
]
:
s
}
'
def
writeSyls
(
self
,
syl_timings
,
line_meta
):
for
line_index
in
range
(
len
(
syl_timings
)):
start_time
=
timeToDate
(
syl_timings
[
line_index
][
0
][
0
])
end_time
=
timeToDate
(
syl_timings
[
line_index
][
-
1
][
0
])
margin_v
=
line_meta
[
line_index
][
'
margin_v
'
]
margin_l
=
line_meta
[
line_index
][
'
margin_l
'
]
margin_r
=
line_meta
[
line_index
][
'
margin_r
'
]
style
=
line_meta
[
line_index
][
'
stylename
'
]
actor
=
line_meta
[
line_index
][
'
actor
'
]
line
=
f
'
Dialogue: 0,
{
start_time
}
,
{
end_time
}
,
{
style
}
,
{
actor
}
,
{
margin_l
:
d
}
,
{
margin_r
:
d
}
,
{
margin_v
:
d
}
,,
'
for
i
in
range
(
len
(
syl_timings
[
line_index
])
-
1
):
syl_dur
=
round
((
syl_timings
[
line_index
][
i
+
1
][
0
]
-
syl_timings
[
line_index
][
i
][
0
])
*
100
)
line
+=
f
'
{{\k
{
syl_dur
:
d
}
}}
{
syl_timings
[
line_index
][
i
][
1
]
:
s
}
'
line
+=
'
\n
'
self
.
file
.
write
(
line
)
\ No newline at end of file
bottom
=
not
bottom
\ No newline at end of file
Ce diff est replié.
Cliquez pour l'agrandir.
autosyl/segment.py
+
1
−
6
Voir le fichier @
4ddf1bed
...
...
@@ -11,16 +11,11 @@ from autosyl.LyricsAlignment.wrapper import align, preprocess_from_file
def
segment
(
songfile
,
reference_
file
=
None
,
syls_per_line
=
10
,
last_syl_dur
=
500
):
def
segment
(
songfile
,
reference_
syls
=
None
,
syls_per_line
=
10
,
last_syl_dur
=
500
):
delay
=
-
4
backtrack
=
False
if
reference_file
:
reference_syls
=
getSyls
(
reference_file
)
else
:
reference_syls
=
[]
print
(
reference_syls
)
audio_file
=
songfile
# pre-computed source-separated vocals; These models do not work with mixture input.
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter