Musique erreur cannot allocate memory

Fermé
MEGAGAMER734 Messages postés 170 Date d'inscription lundi 1 juin 2020 Statut Membre Dernière intervention 29 octobre 2024 - 1 avril 2022 à 21:52
MEGAGAMER734 Messages postés 170 Date d'inscription lundi 1 juin 2020 Statut Membre Dernière intervention 29 octobre 2024 - 2 avril 2022 à 09:48
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.
A voir également:

1 réponse

yg_be Messages postés 23361 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 novembre 2024 Ambassadeur 1 556
1 avril 2022 à 22:38
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
MEGAGAMER734 Messages postés 170 Date d'inscription lundi 1 juin 2020 Statut Membre Dernière intervention 29 octobre 2024 12
Modifié le 2 avril 2022 à 09:51
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