Lancement différé de deux fonctions
rimalou44
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je cherche à lire deux audios différents mais différés de 5 secondes. Donc finalement il faut que j'appelle la première fonction qui me permet de lire le 1er audio puis la 2ème fonction (pour le 2eme audio) se lance 5s après.
J'ai d'abord essayé avec un "time.sleep()" classique mais forcément la lecture du 1er audio est arretée aussi alors que je veux qu'elle continue...
J'ai tenté ensuite avec le programme ci-joint, les lignes concernant le delai de 5s sont aux dernières lignes. Pourtant en le lançant, mes deux audios sont joués simultanément et non en différé malgré le "Timer". Est-ce que quelqu'un aurait une idée de l'erreur ? (ou du pourquoi du comment !)
Merci d'avance
je cherche à lire deux audios différents mais différés de 5 secondes. Donc finalement il faut que j'appelle la première fonction qui me permet de lire le 1er audio puis la 2ème fonction (pour le 2eme audio) se lance 5s après.
J'ai d'abord essayé avec un "time.sleep()" classique mais forcément la lecture du 1er audio est arretée aussi alors que je veux qu'elle continue...
J'ai tenté ensuite avec le programme ci-joint, les lignes concernant le delai de 5s sont aux dernières lignes. Pourtant en le lançant, mes deux audios sont joués simultanément et non en différé malgré le "Timer". Est-ce que quelqu'un aurait une idée de l'erreur ? (ou du pourquoi du comment !)
Merci d'avance
import sounddevice as sd import soundfile as sf import threading import time Son1= 'audio1.wav' Son2= 'audio2.wav' def audioFunc1(): audio1 = 'audio1.wav' data1, fs1 = sf.read(audio1, dtype='float32') L1=[] for i in range(50): L1.append(data1[i]) print(L1) sd.play(data1, fs1, device=5) #enceinte 1 def audioFunc2(): audio2 = 'audio2.wav' data2, fs2 = sf.read(audio2, dtype='float32') L2=[] for i in range(50): L2.append(data2[i]) print(L2) sd.play(data2, fs2, device=6) #enceinte 2 #LECTURE AUDIOS duration = len(sf.read(Son2)[0]) # duration of Son2 def start_audio1(): threading.Thread(target = audioFunc1).start() def start_audio2(): while True: # infinite while-loop threading.Thread(target = audioFunc2).start() # pause while-loop for duration of Son2 time.sleep(duration) #LECTURE DES AUDIOS DIFFERES DE 5 SECONDES start_audio1() delay=threading.Timer(5, start_audio2()) delay.start()
Configuration: Windows / Chrome 100.0.4896.127
A voir également:
- Lancement différé de deux fonctions
- Envoyer un sms en différé - Guide
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Qu'est ce qui se lance au démarrage de l'ordinateur - Guide
4 réponses
Bonsoir
je t'invite à lire cet article concernant la bonne utilisation des balises de codes
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je ne code pas en python (ou très peu) et je n'ai pas la réponse à ton problème.
Cela dit, dès le départ tu fais une erreur importante.
Le but premier d'une fonction c'est de ne pas écrire plusieurs fois un code qui sera utilisé plusieurs fois, pour
Le principe est celui ci, si 2 codes sont "quasiment" identiques et que ce qui change peut être une variable (ou des variables), alors on écrit une seule fonction avec les variables en paramètre.
Donc ça
(T'as vu c'est mieux avec les balises correctement utlisées)
Doit être modifié pour ressembler à
je t'invite à lire cet article concernant la bonne utilisation des balises de codes
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je ne code pas en python (ou très peu) et je n'ai pas la réponse à ton problème.
Cela dit, dès le départ tu fais une erreur importante.
Le but premier d'une fonction c'est de ne pas écrire plusieurs fois un code qui sera utilisé plusieurs fois, pour
- gagner du temps
- dans une moindre mesure, gagner de la place (avec nos gigaoctet aujourd'hui bof...)
- gagner en lisibilité
- gagner en maintenance (y'a qu'un code à faire évoluer).
Le principe est celui ci, si 2 codes sont "quasiment" identiques et que ce qui change peut être une variable (ou des variables), alors on écrit une seule fonction avec les variables en paramètre.
Donc ça
Son1= 'audio1.wav' Son2= 'audio2.wav' def audioFunc1(): audio1 = 'audio1.wav' data1, fs1 = sf.read(audio1, dtype='float32') L1=[] for i in range(50): L1.append(data1[i]) print(L1) sd.play(data1, fs1, device=5) #enceinte 1 def audioFunc2(): audio2 = 'audio2.wav' data2, fs2 = sf.read(audio2, dtype='float32') L2=[] for i in range(50): L2.append(data2[i]) print(L2) sd.play(data2, fs2, device=6) #enceinte 2 #... audioFunc1() #... audioFunc2()
(T'as vu c'est mieux avec les balises correctement utlisées)
Doit être modifié pour ressembler à
Son1= 'audio1.wav' Son2= 'audio2.wav' def audioFunc(audio, nDevice): data1, fs1 = sf.read(audio, dtype='float32') L1=[] for i in range(50): L1.append(data1[i]) print(L1) sd.play(data1, fs1, device=nDevice) #... audioFunc(Son1, 5) #... audioFunc(Son2, 6)
D'accord merci, je n'ai pas encore le reflexe de synthétiser comme ca avec les fonctions, j'aime bien tout décomposer au début histoire de voir toutes les étapes et ensuite organiser le programme comme tu le propose, mais c'est surement une perte de temps et de clarté en effet !
#version corrigée du sujet
Bonjour,
je cherche à lire deux audios différents mais différés de 5 secondes. Donc finalement il faut que j'appelle la première fonction qui me permet de lire le 1er audio puis la 2ème fonction (pour le 2eme audio) se lance 5s après.
J'ai d'abord essayé avec un "time.sleep()" classique mais forcément la lecture du 1er audio est arretée aussi alors que je veux qu'elle continue...
J'ai tenté ensuite avec le programme ci-joint, les lignes concernant le delai de 5s sont aux dernières lignes. Pourtant en le lançant, mes deux audios sont joués simultanément et non en différé malgré le "Timer". Est-ce que quelqu'un aurait une idée de l'erreur ? (ou du pourquoi du comment !)
Merci d'avance
Bonjour,
je cherche à lire deux audios différents mais différés de 5 secondes. Donc finalement il faut que j'appelle la première fonction qui me permet de lire le 1er audio puis la 2ème fonction (pour le 2eme audio) se lance 5s après.
J'ai d'abord essayé avec un "time.sleep()" classique mais forcément la lecture du 1er audio est arretée aussi alors que je veux qu'elle continue...
J'ai tenté ensuite avec le programme ci-joint, les lignes concernant le delai de 5s sont aux dernières lignes. Pourtant en le lançant, mes deux audios sont joués simultanément et non en différé malgré le "Timer". Est-ce que quelqu'un aurait une idée de l'erreur ? (ou du pourquoi du comment !)
Merci d'avance
import sounddevice as sd import soundfile as sf import threading import time Son1= 'audio1.wav' Son2= 'audio2.wav' def audioFunc(audio, nDevice): data1, fs1 = sf.read(audio, dtype='float32') L1=[] for i in range(50): L1.append(data1[i]) print(L1) sd.play(data1, fs1, device=nDevice) #LECTURE AUDIOS duration = len(sf.read(Son2)[0]) # duration of Son2 def start_audio1(): threading.Thread(target = audioFunc(Son1, 5)).start() def start_audio2(): while True: # infinite while-loop threading.Thread(target = audioFunc(Son2, 6)).start() # pause while-loop for duration of Son2 time.sleep(duration) #LECTURE DES AUDIOS DIFFERES DE 5 SECONDES start_audio1() delay=threading.Timer(5, start_audio2()) delay.start()
Y’a une différence entre décomposer et faire 2 fois la même chose.
Décomposer c’est écrire sur plusieurs lignes simples, un code qui peut s’écrire sur une seule ligne (très) complexe.
Par exemple
A mon avis, il existe une fonction python qui permet d’écrire ça sur une ligne, mais soit tu ne la connais pas (et moi non plus pour le coup) soit ça te parait plus clair ainsi.
Ça c’est de la décomposition
Décomposer c’est écrire sur plusieurs lignes simples, un code qui peut s’écrire sur une seule ligne (très) complexe.
Par exemple
L1=[] for i in range(50): L1.append(data1[i])
A mon avis, il existe une fonction python qui permet d’écrire ça sur une ligne, mais soit tu ne la connais pas (et moi non plus pour le coup) soit ça te parait plus clair ainsi.
Ça c’est de la décomposition