Python:使用不同的文件在后台播放音乐播放列表

Posted

技术标签:

【中文标题】Python:使用不同的文件在后台播放音乐播放列表【英文标题】:Python: Playing a music playlist in the background using a different file 【发布时间】:2021-08-25 14:04:12 【问题描述】:

我目前正在尝试使用两个 Python 文件来创建一个学习游戏。我想加入背景音乐让学习者能够集中注意力,所以我想要一个音乐播放器来播放预先加载的歌曲列表。下面是音乐播放器的第一个文件:

#Musicplayer File

import os
import pygame
import random

def play():
    #Get list from directory
    musicList = ['song1','song2','song3']

    random.shuffle(musicList)
    print(musicList)

    #Create music player
    pygame.mixer.init()
    pygame.mixer.music.load(musicList[0])
    print('Now playing: '+musicList[0])
    pygame.mixer.music.play()
    musicList.pop(0)
    songs = True

    while songs:
        if not pygame.mixer.music.get_busy():
            if len(musicList) == 0:
                print('Playlist has ended.')
                songs=False
            else:
                pygame.mixer.music.load(musicList[0])  
                print('Now playing: '+musicList[0])
                pygame.mixer.music.play()
                musicList.pop(0)

我想在我的第二个文件的背景中播放它:

import Musicplayer

#Play music player in the background
Musicplayer.play()

ans1 = 2
print('What is 1 + 1?')
userAnswer = input("Your answer:")
if userAnswer == ans1:
    print('Correct!')
else:
    print('Incorrect.')

目前,它只会转到第二个文件并播放第二个文件,直到播放列表完成。请帮助并提前感谢您!

【问题讨论】:

【参考方案1】:

您的问题是您的play() 中有一个“无限”循环:

    while songs:
        if not pygame.mixer.music.get_busy():
            if len(musicList) == 0:
                print('Playlist has ended.')
                songs=False
            else:
                pygame.mixer.music.load(musicList[0])  
                print('Now playing: '+musicList[0])
                pygame.mixer.music.play()
                musicList.pop(0)

所以函数调用在所有歌曲结束之前永远不会结束,因此你会看到这些行:

ans1 = 2
print('What is 1 + 1?')
userAnswer = input("Your answer:")
if userAnswer == ans1:
    print('Correct!')
else:
    print('Incorrect.')

当音乐结束时。

要解决这个问题,您需要重新设计您的程序。 如果你会用pygame的全GUI来做程序,你可以同时控制输入和音乐,每隔几秒检查一下是否有输入或音乐,然后替换它。

或者如果你不想这样做,你可以阅读python中关于threading的文档: https://docs.python.org/3/library/threading.html

这将允许您同时运行一个 while 循环(检查音乐是否结束)并等待用户输入。

【讨论】:

线程对我有用。为此,我必须按以下方式对其进行编码: Thread(target=musicPlayer.play).start() Thread(target=learningprogram.learningProgram()).start() 不同之处在于没有 '( )' 将并行运行程序,而 'play()' 直接进入程序。这解决了问题,并在从用户那里获得答案的同时在后台播放音乐。

以上是关于Python:使用不同的文件在后台播放音乐播放列表的主要内容,如果未能解决你的问题,请参考以下文章

iOS- 关于AVAudioSession的使用——后台播放音乐

AVAudioPlayer 问题(如果设备被锁定,音乐文件不会在后台模式下播放)

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序

python播放音频

Android Service组件实现后台音乐播放

iOS:使用 Spotify SDK 在后台继续播放音乐