JIT
Création d'un égaliseur audio avec interface graphique sous Windows 10
Veuillez utiliser ces bibliotheques : tkinter, numpy, scipy, pydub, simpleaudio, soundfile, matplotlib pour creer un equaliseur audio avec une interface graphique intuitive affichant tout les reglages possible : volume, effet binaurale accoustic, bass boost, 3D surround, son 8D...etc... Avec option d'ouvrir des fichiers audios et qu'il sous windows 10 et qu'il fonctionne sans internet.
<jitProject title="Égaliseur Audio" id="equaliseur-audio"> <jitFile type="file" filePath="equaliseur_audio.py"> import tkinter as tk from tkinter import filedialog import numpy as np import scipy.signal from pydub import AudioSegment import simpleaudio as sa import soundfile as sf import matplotlib.pyplot as plt
class EqualiseurAudio:
  def __init__(self, master):
    self.master = master
    master.title("Égaliseur Audio")

    self.audio_segment = None
    self.playback = None

    # Volume
    self.volume_frame = tk.Frame(master)
    self.volume_frame.pack()
    tk.Label(self.volume_frame, text="Volume:").pack(side=tk.LEFT)
    self.volume_scale = tk.Scale(self.volume_frame, from_=0, to=2, resolution=0.1, orient=tk.HORIZONTAL, command=self.changer_volume)
    self.volume_scale.set(1)  # Volume initial
    self.volume_scale.pack(side=tk.LEFT)

    # Effet Binaural
    self.binaural_var = tk.BooleanVar()
    tk.Checkbutton(master, text="Effet Binaural", variable=self.binaural_var, command=self.appliquer_effet_binaural).pack()

    # Effet Acoustique (Réverbération - exemple simple)
    self.reverb_var = tk.BooleanVar()
    tk.Checkbutton(master, text="Réverbération", variable=self.reverb_var, command=self.appliquer_reverb).pack()

    # Bass Boost
    self.bass_boost_frame = tk.Frame(master)
    self.bass_boost_frame.pack()
    tk.Label(self.bass_boost_frame, text="Bass Boost:").pack(side=tk.LEFT)
    self.bass_boost_scale = tk.Scale(self.bass_boost_frame, from_=0, to=10, orient=tk.HORIZONTAL, command=self.appliquer_bass_boost)
    self.bass_boost_scale.set(0)
    self.bass_boost_scale.pack(side=tk.LEFT)

    # 3D Surround (Panoramique Stéréo - exemple simple)
    self.surround_frame = tk.Frame(master)
    self.surround_frame.pack()
    tk.Label(self.surround_frame, text="3D Surround:").pack(side=tk.LEFT)
    self.surround_scale = tk.Scale(self.surround_frame, from_=-1, to=1, resolution=0.1, orient=tk.HORIZONTAL, command=self.appliquer_3d_surround)
    self.surround_scale.set(0) # Centre par défaut
    self.surround_scale.pack(side=tk.LEFT)

    # Son 8D (Panoramique Cyclique - exemple simple)
    self.son_8d_var = tk.BooleanVar()
    tk.Checkbutton(master, text="Son 8D", variable=self.son_8d_var, command=self.appliquer_son_8d).pack()


    # Bouton Ouvrir Fichier
    self.ouvrir_bouton = tk.Button(master, text="Ouvrir Fichier Audio", command=self.ouvrir_fichier)
    self.ouvrir_bouton.pack()

    # Bouton Play/Pause
    self.play_pause_bouton = tk.Button(master, text="Play", command=self.play_pause_audio)
    self.play_pause_bouton.pack()
    self.is_playing = False


  def ouvrir_fichier(self):
    chemin_fichier = filedialog.askopenfilename(
        defaultextension=".wav",
        filetypes=[("Fichiers Audio", "*.wav *.mp3 *.flac *.ogg")]
    )
    if chemin_fichier:
      try:
        self.audio_segment = AudioSegment.from_file(chemin_fichier)
        print(f"Fichier audio ouvert: {chemin_fichier}")
      except Exception as e:
        tk.messagebox.showerror("Erreur", f"Impossible d'ouvrir le fichier audio: {e}")

  def play_pause_audio(self):
    if self.audio_segment:
      if not self.is_playing:
        self.play_audio()
      else:
        self.pause_audio()
    else:
      tk.messagebox.showinfo("Info", "Veuillez d'abord ouvrir un fichier audio.")

  def play_audio(self):
    if self.audio_segment:
      if self.playback and self.playback.is_playing():
          self.playback.stop()

      frame_rate = self.audio_segment.frame_rate
      num_channels = self.audio_segment.channels
      sample_width = self.audio_segment.sample_width
      audio_data = np.array(self.audio_segment.get_array_of_samples())

      # Appliquer les effets (dans l'ordre)
      audio_data = self.appliquer_volume_audio(audio_data)
      if self.binaural_var.get():
          audio_data = self.appliquer_effet_binaural_audio(audio_data, frame_rate, num_channels)
      if self.reverb_var.get():
          audio_data = self.appliquer_reverb_audio(audio_data, frame_rate)
      bass_boost_level = self.bass_boost_scale.get()
      if bass_boost_level > 0:
          audio_data = self.appliquer_bass_boost_audio(audio_data, frame_rate, bass_boost_level)
      surround_level = self.surround_scale.get()
      if surround_level != 0:
          audio_data = self.appliquer_3d_surround_audio(audio_data, num_channels, surround_level)
      if self.son_8d_var.get():
          audio_data = self.appliquer_son_8d_audio(audio_data, frame_rate, num_channels)


      # Assurer que les données audio sont dans la plage appropriée pour simpleaudio
      audio_data = np.clip(audio_data, -2**(8*sample_width-1), 2**(8*sample_width-1)-1).astype(np.int16)


      play_audio_data = audio_data.tobytes()


      try:
          self.playback = sa.play_buffer(play_audio_data, num_channels, sample_width, frame_rate)
          self.play_pause_bouton.config(text="Pause")
          self.is_playing = True
      except Exception as e:
          tk.messagebox.showerror("Erreur de Lecture", f"Erreur lors de la lecture audio: {e}")


  def pause_audio(self):
      if self.playback and self.playback.is_playing():
          self.playback.stop()
          self.play_pause_bouton.config(text="Play")
          self.is_playing = False


  def changer_volume(self, volume):
      # Le volume est appliqué lors de la lecture dans play_audio
      pass

  def appliquer_volume_audio(self, audio_data):
      volume_niveau = self.volume_scale.get()
      return audio_data * volume_niveau

  def appliquer_effet_binaural(self):
      # L'effet binaural est appliqué lors de la lecture dans play_audio
      pass

  def appliquer_effet_binaural_audio(self, audio_data, frame_rate, num_channels):
      if num_channels == 1: # Binauralisation stéréo uniquement
          canal_gauche = audio_data
          canal_droit = audio_data
          # Filtrage HRTF pourrait être appliqué ici pour un effet binaural plus réaliste
          return np.column_stack((canal_gauche, canal_droit))
      return audio_data # Si déjà stéréo, on ne fait rien (ou on pourrait envisager un traitement binaural spécifique)


  def appliquer_reverb(self):
      # La réverbération est appliquée lors de la lecture dans play_audio
      pass

  def appliquer_reverb_audio(self, audio_data, frame_rate):
      # Exemple simple de réverbération (délai et atténuation)
      delay = int(0.1 * frame_rate) # Délai de 0.1 seconde
      attenuation = 0.5
      reverb_signal = np.zeros_like(audio_data)
      reverb_signal[delay:] += audio_data[:-delay] * attenuation
      return audio_data + reverb_signal


  def appliquer_bass_boost(self, niveau):
      # Bass boost est appliqué lors de la lecture dans play_audio
      pass

  def appliquer_bass_boost_audio(self, audio_data, frame_rate, niveau):
      # Exemple simple de Bass Boost (filtre passe-bas)
      cutoff_freq = 200 # Hz, fréquence de coupure pour les basses
      b, a = scipy.signal.butter(4, cutoff_freq / (frame_rate / 2), btype='low') # Filtre Butterworth
      boost_factor = 1 + (niveau / 10.0) # Facteur d'amplification basé sur le niveau
      filtered_signal = scipy.signal.lfilter(b, a, audio_data)
      return audio_data + filtered_signal * boost_factor # Ajouter le signal filtré amplifié à l'original


  def appliquer_3d_surround(self):
      # 3D Surround est appliqué lors de la lecture dans play_audio
      pass

  def appliquer_3d_surround_audio(self, audio_data, num_channels, niveau_panoramique):
      if num_channels == 2: # Panoramique stéréo uniquement
          canal_gauche = audio_data[:, 0]
          canal_droit = audio_data[:, 1]
          if niveau_panoramique > 0: # Déplacer vers la droite
              canal_droit = canal_droit * (1 + niveau_panoramique)
              canal_gauche = canal_gauche * (1 - niveau_panoramique)
          elif niveau_panoramique < 0: # Déplacer vers la gauche
              canal_gauche = canal_gauche * (1 - niveau_panoramique) # Moins négatif = plus fort
              canal_droit = canal_droit * (1 + niveau_panoramique) # Plus négatif = moins fort
          return np.column_stack((canal_gauche, canal_droit))
      return audio_data # Si mono, on ne fait rien


  def appliquer_son_8d(self):
      # Son 8D est appliqué lors de la lecture dans play_audio
      pass

  def appliquer_son_8d_audio(self, audio_data, frame_rate, num_channels):
      if num_channels == 2: # Son 8D stéréo uniquement
          canal_gauche = audio_data[:, 0]
          canal_droit = audio_data[:, 1]
          duree = len(audio_data) / frame_rate # Durée en secondes
          frequence_panoramique = 0.2 # Hz, vitesse de panoramique
          temps = np.linspace(0, duree, len(audio_data), endpoint=False)
          modulation_panoramique = np.sin(2 * np.pi * frequence_panoramique * temps)
          canal_gauche_modifie = canal_gauche * (1 - modulation_panoramique)
          canal_droit_modifie = canal_droit * (1 + modulation_panoramique)
          return np.column_stack((canal_gauche_modifie, canal_droit_modifie))
      return audio_data # Si mono, on ne fait rien


if __name__ == "__main__":
  root = tk.Tk()
  equaliseur = EqualiseurAudio(root)
  root.mainloop()

*

Veuillez utiliser ces bibliotheques : tkinter, numpy, scipy, pydub, simpleaudio, soundfile, matplotlib pour creer un equaliseur audio avec une interface graphique intuitive affichant tout les reglages possible : volume, effet binaurale accoustic, bass boost, 3D surround, son 8D...etc... Avec option d'ouvrir des fichiers audios et qu'il sous windows 10 et qu'il fonctionne sans internet.
Updated files
v1
Veuillez utiliser ces bibliotheques : tkinter, numpy, scipy, pydub, simpleaudio, soundfile, matplotlib pour creer un equaliseur audio avec une interface graphique intuitive affichant tout les reglages possible : volume, effet binaurale accoustic, bass boost, 3D surround, son 8D...etc... Avec option d'ouvrir des fichiers audios et qu'il sous windows 10 et qu'il fonctionne sans internet.
Updated files
v2
Veuillez utiliser ces bibliotheques : tkinter, numpy, scipy, pydub, simpleaudio, soundfile, matplotlib pour creer un equaliseur audio avec une interface graphique intuitive affichant tout les reglages possible : volume, effet binaurale accoustic, bass boost, 3D surround, son 8D...etc... Avec option d'ouvrir des fichiers audios et qu'il sous windows 10 et qu'il fonctionne sans internet.
Updated files
v3