Lecture de 2 fichiers audio synchronisés avec VLC
bonjour a tous,
J'essais de lire simultanément 2 fichiers mais je ne sais pas s'il y a une syntaxe pour ca. Pour le moment je dois lancer 2 fenetre VLC et je dois faire "play" pour chacun d'eux, donc un gros délais entre les 2 exécutions. J'ai ajouté les arguments "no playlist-autostart" sans résultat. J'ai vu ce code quelque part mais ca ne semble pas aller dans le VBA: vlc :start-time=10 :stop-time=30 DP8(1)_1.wav :start-time=11 :stop-time=39 DP8(2)_1.wav:start-time=20 :stop-time=90 DP8(2)_1.wav
Dim vlcPath As String
Dim audioFilePath1 As String
Dim audioFilePath2 As String
Dim startTime1 As Long
Dim startTime2 As Long
Dim vlcArgs As String
vlcPath = "C:\Program Files\VideoLAN\VLC\vlc.exe" ' Chemin d'accès à l'application VLC
audioFilePath1 = "C:\Users\michel\piano\fichier1.wav" ' Chemin d'accès aux fichiers audio
audioFilePath2 = "C:\Users\michel\piano\fichier2.wav"
startTime1 = 5 ' Temps de début pour chaque fichier (en secondes)
startTime2 = 5
vlcArgs = audioFilePath1 & " --start-time=" & startTime1 & " --no-playlist-autostart"
Shell vlcPath & " " & vlcArgs, vbNormalFocus
vlcArgs = audioFilePath2 & " --start-time=" & startTime2 & " --no-playlist-autostart"
Shell vlcPath & " " & vlcArgs, vbNormalFocusApres beaucoup de tentatives j'en suis arrivé a un compromis acceptable. J'ouvre plusieurs occurences de VLC une a la suite de l'autre avec leur fichier associé, mais en mettant sur pause tres rapidement chacun d'eux avant de lancer le prochain (a cause du délais nécessaire pour l'ouverture de chacun qui pourrait s'accumuler jusqu'au dernier lancement. Dans un 2ieme temps, j'enleve la pause tour a tour de chacun d'eux (ici le délais entre chaque occurence n'a pas besoin d'etre grand pour que l'exécution se fasse, simplement un petit délais ajouter de quelques millisecondes entre chaque.
Cette approche me permet de lire jusqu'a 8 pistes audio sans délais important entre la 1 ere et la derniere. Mon utilisation est pour un lecture multipiste apres enregistrement de tout les instruments.
Voici un apercu de mon code, notez que totalSeconds et temps écoulé peuvent etre égale a 0 pour des enregistrements de fichier a partir du temps 0sec.
Sub Play_VLC() 'ouvre toutes les pistes visées
StopTimer = False
vlcArgs1 = "C:\Users\michel\piano\" & nt1 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart" ' l'argument no playlist-autostart mettra en pause a l'ouverture Noter qu'il faut mettre le parametre "lancer automatiquement" dans liste de lecture
vlcArgs2 = "C:\Users\michel\piano\" & nt2 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart" 'Temps_écoulé sert a repartir apres avoir fait "pause" (arret)
vlcArgs3 = "C:\Users\michel\piano\" & nt3 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
vlcArgs4 = "C:\Users\michel\piano\" & nt4 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
vlcArgs5 = "C:\Users\michel\piano\" & nt5 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
vlcArgs6 = "C:\Users\michel\piano\" & nt6 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
vlcArgs7 = "C:\Users\michel\piano\" & nt7 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
vlcArgs8 = "C:\Users\michel\piano\" & nt8 & ".wav" & " --start-time=" & totalSeconds + Temps_écoulé '& " --no-playlist-autostart"
PauseExécution 200
If aa <> "" Then 's'il y a quelque chose sur la piste 1
Shell vlcPath & " " & vlcArgs1, vbNormalFocus ' Lance la première instruction VLC
PauseExécution 100 'délais 100 msec
SendKeys "1" 'on retourne "Pause" a VLC
End If
If bb <> "" Then 's'il y a quelque chose sur la piste 2
Shell vlcPath & " " & vlcArgs2, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If cc <> "" Then
Shell vlcPath & " " & vlcArgs3, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If dd <> "" Then
Shell vlcPath & " " & vlcArgs4, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If ee <> "" Then
Shell vlcPath & " " & vlcArgs5, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If ff <> "" Then
Shell vlcPath & " " & vlcArgs6, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If gg <> "" Then
Shell vlcPath & " " & vlcArgs7, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
If hh <> "" Then
Shell vlcPath & " " & vlcArgs8, vbNormalFocus
PauseExécution 100
SendKeys "1"
End If
PlayVLC = True
PauseExécution 20 'important sinon lorsqu'il y a 1 seul élément VLC, la commande play de cet élément ne se fera pas
'on démarre chaque élement mais le plus regrouper possible pour éviter des délais
Send "2", 10 'ma fonction. on fait "play" pour toute les occurences de VLC ouvertes