Python: 使用不同的文件在后台播放音乐播放列表
Python: Playing a music playlist in the background using a different file
我目前正在尝试使用两个 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.')
目前,它只会转到第二个文件并播放第二个文件,直到播放列表结束。请提前帮助并感谢您!
您的问题是 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 循环(检查音乐是否结束)并同时等待用户输入。
我目前正在尝试使用两个 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.')
目前,它只会转到第二个文件并播放第二个文件,直到播放列表结束。请提前帮助并感谢您!
您的问题是 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 循环(检查音乐是否结束)并同时等待用户输入。