使用pygame不能在循环中连续播放mp3文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pygame不能在循环中连续播放mp3文件?相关的知识,希望对你有一定的参考价值。

Hi I want to play a mp3 but when the function recalled that is logCreater an error shows can load mp3.First time it play audio correctly but when it's recalled then it cant load mp3.Error msg say's pygame.mixer.music.load cant load xxxxx.mp3 file Actually this is lil project and this is just one module of it.Please suggest me the code correction.

错误信息是:

回溯(最近一次调用)。 文件 "e:Tutorials etcProjBack/Healthy_programmer_cli/MainModule.py",第151行,在timCount() 文件 "e:Tutorials etcProjBack/Healthy_programmer_cli/MainModule. py", 第65行, in timCount EyeExcercise.logCreater() File "e:tutorials etc/ProjBack/Healthy_programmer_cli/EyeExcercise.py", 第45行, in logCreater pygame.mixer.music.load("Eyesound.mp3")pygame.error: 无法打开'Eyesound.mp3'。

import os
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
from os.path import expanduser

import time as t
import getpass
usernm = getpass.getuser()
from datetime import datetime
import pygame





def userDirFinder():
    from os.path import expanduser
    usrpth = expanduser("~")
    mainp = os.path.join(usrpth, "Documents")
    return mainp

def checknSetdir():
    mainp=userDirFinder()
    target_path = os.path.join(mainp,"HealthManger","Eye_Excercise_log")

    if os.path.exists(target_path):
        os.chdir(target_path)
    else:

        os.makedirs(target_path)
        os.chdir(target_path)


def getCurrentDateandTime():
    Dat = datetime.now()

    currentD = Dat.strftime("%d/%m/%Y") 
    currentT = Dat.strftime("%I:%M %p")
    return currentD , currentT



def logCreater():
        print("Countdown paused")
        pygame.mixer.init()
        pygame.mixer.music.load("Eyesound.mp3")
        pygame.mixer.music.play(-1)

        write_msg = f"Eye Excercise Done by {usernm}"


        while 1:

            try:
                print("Time for a Eye Excercise Break , After the Eye Excercise")
                usr_msg = input("Type "Done" to stop this alarm: ")

                usr_msg = usr_msg.lower()
                if usr_msg != "done":
                    raise ValueError("Invalid Answer")
                elif "done" == usr_msg:
                    checknSetdir()
                    with open("eye_excercise_log.txt","a") as fi:
                        cdat , ctim = getCurrentDateandTime()
                        fi.write(f"Date: {cdat}          Time: {ctim}          Message: {write_msg}
")
                        # print("Log Created")

                        pygame.mixer.music.stop()

                        break


            except Exception as e:
                print(e)


def logReader():

        try:
            checknSetdir()

            with open("eye_excercise_log.txt","r") as fi:
                lis = fi.readlines()
                for i in lis:
                    print(i)
            input("Press to contiue")
        except FileNotFoundError:
            print("File is not created Yet")
            input("Press to contiue")



if __name__ =="__main__":
    while True:
        logCreater()
答案

第一次正确播放音频,但当它被调用时,它不能加载MP3。

播放音乐后,在功能中改变当前的工作目录。checknSetdir,由 os.chdir(target_path).

在应用程序开始时获取当前工作目录。

import os

currentWorkDir = os.getcwd()

使用绝对路径加载文件 "眼睛的声音.mp3":

pygame.mixer.music.load(os.path.join(currentWorkDir, "Eyesound.mp3"))

以上是关于使用pygame不能在循环中连续播放mp3文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pygame 播放 mp3?

Python 用pygame模块播放MP3

如何用js控制audio元素连续播放mp3文件

如何用js控制audio元素连续播放mp3文件

使用pygame自动完成歌曲后如何播放文件中的下一首歌曲

媒体播放器循环播放:Android