Création d'un lecteur de bande son pour le live controlé par midi
Salut, je me suis galéré à trouver un lecteur qui déclenche mes pistes pour le live contrôlé par midi, Lisp fonctionnais pas sur ma distro arch et avec ardour ou les autres solution proposé soit sa marchait pas soit je comprenais pas, bref j'ai donc fait un script python que je partage ici pour aider les galérien/ne comme moi!
D'abord pour trouver les touches sur lequel j'appuie il faut qmidiroute installez le si vous l'avez pas.
il faut aussi avoir installé ses trucs la:
mido
pygame
threading
Puis une fois les note trouvé j'ai mis ce code dans le fichier :
pour le faire fonctionné le fichier "lecteur live.sh" que vous devez rendre executable:
J'arrive pas a faire pause et a reprendre, sa fait stop a la place et j'arrive pas a lire deux piste en même temps mais sinon sa marche et c'est facile, plus que d'essayer de faire marcher LISP ou de paramétré un truc complexe!
Si vous voulez l'amélioré c'est pas de refus la c'est juste pour dépanné les gens!
D'abord pour trouver les touches sur lequel j'appuie il faut qmidiroute installez le si vous l'avez pas.
il faut aussi avoir installé ses trucs la:
mido
pygame
threading
Puis une fois les note trouvé j'ai mis ce code dans le fichier :
import mido import pygame import threading # Mapping des notes à des fichiers sons TRACKS = { 64: "pistea.wav", 65: "pisteb.wav" #etc... } # Notes spéciales PAUSE_NOTE = 70 STOP_NOTE = 71 # Init mixer pygame.mixer.init() channels = {} paused_sounds = {} # Lecture def play_track(note): stop_all_tracks() filename = TRACKS[note] sound = pygame.mixer.Sound(filename) ch = sound.play() channels[note] = (sound, ch) print(f">>> Lecture : {filename}") # Pause / reprise def toggle_pause(): for note, (sound, ch) in channels.items(): if ch.get_busy(): paused_sounds[note] = ch ch.stop() print(f"||| Pause : {TRACKS[note]}") else: new_ch = sound.play() channels[note] = (sound, new_ch) print(f"⏵ Reprise : {TRACKS[note]}") paused_sounds.clear() # Stop complet def stop_all_tracks(): for note, (sound, ch) in channels.items(): ch.stop() channels.clear() paused_sounds.clear() print("××× Stop toutes les pistes.") # Gestion des messages MIDI def listen_midi(port_name): with mido.open_input(port_name) as inport: print(f" Écoute sur {port_name}...") for msg in inport: if msg.type == 'note_on' and msg.velocity > 0: note = msg.note print(f"Note reçue : {note}") if note in TRACKS: play_track(note) elif note == PAUSE_NOTE: toggle_pause() elif note == STOP_NOTE: stop_all_tracks() # Lancement print(" Ports MIDI disponibles :") ports = mido.get_input_names() for i, port in enumerate(ports): print(f"{i}: {port}") if ports: # Recherche du port "MI" de ton Launchpad selected_port = None for port in ports: if "Launchpad Mini MK3" in port and "MI" in port: selected_port = port break if selected_port: listen_midi(selected_port) else: print(" Launchpad Mini MK3 non trouvé parmi les entrées MIDI.") else: print("Aucun port MIDI détecté.")
pour le faire fonctionné le fichier "lecteur live.sh" que vous devez rendre executable:
#!/bin/bash # Se placer dans le bon répertoire cd /repertoire du script/ # Exécuter le script Python python3 launchpad_player.py
J'arrive pas a faire pause et a reprendre, sa fait stop a la place et j'arrive pas a lire deux piste en même temps mais sinon sa marche et c'est facile, plus que d'essayer de faire marcher LISP ou de paramétré un truc complexe!
Si vous voulez l'amélioré c'est pas de refus la c'est juste pour dépanné les gens!