Musique erreur cannot allocate memory

MEGAGAMER734 Messages postés 183 Date d'inscription   Statut Membre Dernière intervention   -  
MEGAGAMER734 Messages postés 183 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai créé un programme python qui lit aléatoirement les musiques / fichiers sonores présents dans le dossier musique de mon raspberry pi 4b. Les premières musiques sont lues correctement, mais après un petit moment, l'erreur "mmap() failed: Cannot allocate memory" apparaît plusieurs fois, avant de continuer la lecture vers une autre musique. J'aimerais savoir à quoi est due cette erreur et comment la supprimer.
Voici le programme entier:
"""Read random music from music folder /home/pi/Music"""

import audioread as ar  # read metadata like duration of the mp3 file
import random as rd  # random functions
import vlc  # play sound of mp3 file
import glob  # list files and directories in the current directory
import time  # make pause

while True:  # general loop : one music peer loop
    file = rd.choice(glob.glob("/home/pi/Music/*"))  # pick a random file
    while True:  # until a playable music is found
        try:  # if the selected file is a music
            with ar.audio_open(file) as mus:  # open music file
                lenght = mus.duration  # get the duration of the music
                music = vlc.MediaPlayer(file)  # init music
                name = file.split("/")[-1]
                print(f"Now playing {name}...")  # print the music name
                music.play()  # play music
                time.sleep(lenght+1)  # whait until music end
            break  # next music
        except IsADirectoryError:  # if the selected file is a directory
            new = rd.choice(glob.glob(f"{file}/*")).split("/")[-1]
            file = f"{file}/{new}"  # search a file in this folder next loop

Et voici le résultat de l'exécution du programme sur quelques musiques:
pi@raspberrypi:~ $ python Desktop/codes/python/music.py
Now playing rap_saison_3.mp3...
Now playing whoopty.mp3...
Now playing 33_a_study_in_parhelion_red.mp3...
Now playing 1_survive.mp3...
Now playing billy.mp3...
Now playing 4_take_the_dive.mp3...
Now playing 48_shadow_leviathan.mp3...
Now playing rap_saison_3.mp3...
Now playing 4_take_the_dive.mp3...
Now playing 8_deep_dive.mp3...
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
Now playing 32_exosuit.mp3...
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
Now playing 48_rock_it.mp3...
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
mmap() failed: Cannot allocate memory
Now playing billy.mp3...

Merci de votre aide.

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    si j'étais toi, j'essaierais d'éviter try/except, en vérifiant explicitement si le fichier est utilisable.
    j'essaierais aussi de faire des sections try/break plus petites, toujours pour pouvoir prévenir plutôt que réagir.
    1
    1. MEGAGAMER734 Messages postés 183 Date d'inscription   Statut Membre Dernière intervention   25
       
      Merci de ton aide et de ta réponse rapide.
      j'ai modifié le try except en if else mais cela n'a pas résolu le problème. J'ai ajouté des marqueurs à certaines étapes du programme afin de connaître la cause précise. Tout d'abord, j'ai remarqué que l'erreur survenait toujours à la 11ème musique, mais c'est peut être une coïncidence. Sinon l'erreur survient sur cette ligne de code:
      music = vlc.MediaPlayer(file)  # init music

      C'est donc le chargement de la musique qui pose problème. Mais après plusieurs essais (entre quatre et six) la musique est finalement lue (le programme ne passe pas à la musique suivante pais essaie de lire la musique jusqu'à ce que ça fonctionne).
      Finalement, ce problème n'est pas très grave puisque la musique est finalement lue, mais j'aimerais quand même bien savoir d'où il vient afin d'avoir un code totalement fonctionnel. Merci de ton aide. Je remet au cas où le nouveau programme et le résultat de l'exécution.
      """Read random music from music folder /home/pi/Music"""
      
      import audioread as ar  # read metadata like duration of the mp3 file
      import random as rd  # random functions
      import vlc  # play sound of mp3 file
      import glob  # list files and directories in the current directory
      import time  # make pause
      
      while True:  # general loop : one music peer loop
          file = rd.choice(glob.glob("/home/pi/Music/*"))  # pick a random file
          while True:  # until a playable music is found
              if file[-4:] == ".mp3":  # if the selected file is a music
                  with ar.audio_open(file) as mus:  # open music file
                      lenght = mus.duration  # get the duration of the music
                      print("\nduration get")
                      music = vlc.MediaPlayer(file)  # init music
                      print("music initiated")
                      name = file.split("/")[-1]
                      print(f"Now playing {name}...")  # print the music name
                      music.play()  # play music
                      print("music is playing")
                      time.sleep(lenght+1)  # whait until music end
                  break  # next music
              else:  # if the selected file is a directory
                  new = rd.choice(glob.glob(f"{file}/*")).split("/")[-1]
                  file = f"{file}/{new}"  # search a file in this folder next loop
      

      pi@raspberrypi:~ $ python Desktop/codes/python/music.py

      duration get
      music initiated
      Now playing whoopty.mp3...
      music is playing

      duration get
      music initiated
      Now playing 5_deep_blue.mp3...
      music is playing

      duration get
      music initiated
      Now playing ma_lubulule.mp3...
      music is playing

      duration get
      music initiated
      Now playing 41_leviathan.mp3...
      music is playing

      duration get
      music initiated
      Now playing 16_alien_passageways.mp3...
      music is playing

      duration get
      music initiated
      Now playing gros_fracas.mp3...
      music is playing

      duration get
      music initiated
      Now playing plain_janes.mp3...
      music is playing

      duration get
      music initiated
      Now playing 4_take_the_dive.mp3...
      music is playing

      duration get
      music initiated
      Now playing plain_janes.mp3...
      music is playing

      duration get
      music initiated
      Now playing gros_fracas.mp3...
      music is playing

      duration get
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      music initiated
      Now playing 26_buoyancy.mp3...
      music is playing

      duration get
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      mmap() failed: Cannot allocate memory
      music initiated
      Now playing 10_what_are_you.mp3...
      music is playing
      0