def init(self, game: Game): if self._initialized: return self.MUSIC_END_EVENT = pygame.event.custom_type() pgmusic.set_endevent(self.MUSIC_END_EVENT) game.register_eventhandler(self.handle_event) self._initialized = True
def __init__(self, channel_dir, start_playing=True): self.playing = False self.chan_dir = channel_dir self.num_chans = len(channel_dir) self.chan_num = 0 self.load_playlist(0) pygame.init() pygame.mixer.init() pygame.display.init() music.set_endevent(pygame.USEREVENT) if start_playing: self.start_pl()
# #--------------------------------------------------------------------------- from __future__ import division import os from random import randrange try: from pygame.mixer import music except ImportError: music = None print "Music not available" if music: import root music.set_endevent(root.MUSIC_END_EVENT) from resource import resource_path from root import schedule #--------------------------------------------------------------------------- fadeout_time = 1 # Time over which to fade out music (sec) change_delay = 2 # Delay between end of one item and starting the next (sec) #--------------------------------------------------------------------------- music_enabled = True current_music = None current_playlist = None next_change_delay = 0
import os from os import path import pygame.mixer from pygame.mixer import music import random import shutil import time #--------------------------------------------------------- # INITIALIZATIONS / EVENT CREATION #--------------------------------------------------------- pygame.init() pygame.mixer.init() SONG_END = pygame.USEREVENT + 1 music.set_endevent(SONG_END) #--------------------------------------------------------- # CONSTANTS #--------------------------------------------------------- #The path where all of the songs are located (USB stick) songPath = "/media/pi/39A2-CB0B" #The file name that contains which track of the playlist #that is currently playing currentSong = "current_song.dat" #The file name that contains the current shuffled track currentShuffledList = "current_shuffled_list.dat"
from pygame.event import Event from albow.core.ui.Widget import Widget try: from pygame.mixer import music except ImportError: music = None print("Music not available") if music: # # Pygame 1.9 update # music.set_endevent(MUSIC_END_EVENT) # This needs updating music.set_endevent() class MusicVolumeControl(Widget): """ A control for adjusting the volume of music played by the music module. """ def __init__(self, **kwds): # # Python 3 update # super().__init__(Rect((0, 0), (100, 20)), **kwds) def draw(self, surf: Surface): r = self.get_margin_rect()
__all__ = [ 'rewind', 'stop', 'fadeout', 'set_volume', 'get_volume', 'get_pos', 'set_pos', 'play', 'queue', 'pause', 'unpause', ] _music.set_endevent(constants.MUSIC_END) class _MusicLoader(ResourceLoader): """Pygame's music API acts as a singleton with one 'current' track. No objects are returned that represent different tracks, so this loader can't return anything useful. But it can perform all the path name validations and return the validated path, so that's what we do. This loader should not be exposed to the user. """ EXTNS = ['mp3', 'ogg', 'oga'] TYPE = 'music'
from pygame.mixer import music as _music from .loaders import ResourceLoader from . import constants __all__ = [ 'rewind', 'stop', 'fadeout', 'set_volume', 'get_volume', 'get_pos', 'set_pos', 'play', 'queue', 'pause', 'unpause', ] _music.set_endevent(constants.MUSIC_END) class _MusicLoader(ResourceLoader): """Pygame's music API acts as a singleton with one 'current' track. No objects are returned that represent different tracks, so this loader can't return anything useful. But it can perform all the path name validations and return the validated path, so that's what we do. This loader should not be exposed to the user. """ EXTNS = ['mp3', 'ogg', 'oga'] TYPE = 'music' def _load(self, path): return path _loader = _MusicLoader('music')
def do(self,argument): Map.readMap(argument[0],argument[1]) readMusic() self.register=[] if MAPINFO: print(vars(Map.songMap)) background=loadBackground() reg=Register((self.size-background.get_size())//2,surface=background) self.register.append(reg) trace['Width']=trace['Skin'][0].get_size()[0] for i in range(trace['Number']): #根據先前設定好的軌道數量,利用相對位置生成整齊的軌道圖片 if i==0: reg=Animation(((self.size[0]-trace['BoxWidth']*(trace['Number']-1)-trace['Number']*trace['Width'])//2,0),surface=trace['Skin'][0]) else: reg=Animation((self.register[-1].rect.topright[0]+trace['BoxWidth'],0),surface=trace['Skin'][0]) reg.animation(trace['Skin']) self.register.append(reg) TraceSkin=self.register[-trace['Number']::]#保存位置,以後方便使用 #生成判定線 reg=Register((TraceSkin[0].rect.topleft[0],trace['Judge']),(TraceSkin[-1].rect.topright[0]-TraceSkin[0].rect.topleft[0],5)) reg.surface.fill(trace['Color']) self.register.append(reg) TraceJudge=self.register[-1] TraceJudgeLineY=TraceJudge.rect.centery #生成掉落方塊 note=pygame.image.load_extended(path.join(skinDir,'mania-note1.png')).convert_alpha() noteX,noteY=note.get_size() hnote=pygame.image.load_extended(path.join(skinDir,'mania-note1L-0.png')).convert_alpha() hnote=pygame.transform.scale(hnote,(TraceSkin[0].size[0]//2,1)) noteType={ 'Hold':0, 'Down':1, 'Up':2 } hnoteX,hnoteY=hnote.get_size() hnoteD=2*trace['Speed'] area=TraceJudge.size reg=Register(((self.size[0]-area[0])//2,0),(area[0],self.size[1])) self.register.append(reg) Notes=self.register[-1] mania300=[pygame.image.load_extended(path.join(skinDir,'hit300-'+str(i)+ '.png')).convert_alpha() for i in range(30)] mania100=[pygame.image.load_extended(path.join(skinDir,'hit100-'+str(i)+ '.png')).convert_alpha() for i in range(30)] mania50=[pygame.image.load_extended(path.join(skinDir,'hit50-'+str(i)+ '.png')).convert_alpha() for i in range(30)] mania0=[pygame.image.load_extended(path.join(skinDir,'hit0-'+str(i)+ '.png')).convert_alpha() for i in range(35)] #設定擊中時的動畫效果 for i in range(trace['Number']): reg=AnimationMultipleEffectCenter((TraceSkin[i].rect.center[0],trace['Judge'])) reg.animation(mania300) reg.animation(mania100) reg.animation(mania50) reg.animation(mania0) self.register.append(reg) TracePoint=self.register[-trace['Number']:] moveTime=1500/trace['Speed']#設定物體掉落的速度(EX:若1倍速,則物體掉落的時間為1.5sec) music.set_volume(Map.songMap.timing_points[0].volume/100) hit_obj=Map.songMap._hit_objects.copy()#copy掉落物件的屬性 hit_obj.reverse()#把list反轉,提高讀取速度(由最後一個往前讀取) hit_objTime=hit_obj[-1].time.total_seconds()*1000 timeBoard={'Perfect':75,'Great':150,'Good':350,'Miss':500} scoreBoard={'Perfect':0,'Great':0,'Good':0,'Miss':0,'Combo':[0]} comboBoard=ScoreBoard()#顯示連擊數 comboBoard.color=(0,255,255) self.register.append(comboBoard) self.KEY=[True for i in range(trace['Number'])] music.play() music.set_endevent(MUSIC_END) while 1: time=music.get_pos() NotesClear=[] event_get=pygame.fastevent.get() for event in event_get: if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if not AUTO: if event.unicode in trace['BtnKey']:#取得以設定的按鍵值(EX: D F J K) index=trace['BtnKey'][event.unicode] #把值給變數index TraceSkin[index].frame=1 if self.KEY[index]: for i,v in enumerate(Notes.register): if v.trace != index or v.type != noteType['Down']: continue for i0,k in enumerate(timeBoard.keys()): if -timeBoard[k]<=time-v.time<=timeBoard[k]:#判斷按下去時,是得到perfect great good miss if k!='Miss': scoreBoard['Combo'][-1]+=1 #增加combo else: #結束combo scoreBoard['Combo'][-1]=int(scoreBoard['Combo'][-1]) scoreBoard['Combo'].append(0) if scoreBoard['Combo'][-1]>0: #有combo才顯示combo數 comboBoard.content=str(int(scoreBoard['Combo'][-1])) TracePoint[index].begin(i0) scoreBoard[k]+=1 NotesClear.append(i) break else: continue break self.KEY[index]=False if event.unicode =='\x1b': music.stop() return if event.type==KEYUP: if not AUTO: if event.unicode in trace['BtnKey']: index=trace['BtnKey'][event.unicode] TraceSkin[index].frame=0 self.KEY[index]=True for i,v in enumerate(Notes.register): if v.trace!=index: continue if v.type!=noteType['Up']: break for i0,k in enumerate(timeBoard.keys()): if -timeBoard[k]<=time-v.time<=timeBoard[k]: if k!='Miss': scoreBoard['Combo'][-1]+=1 else: scoreBoard['Combo'][-1]=int(scoreBoard['Combo'][-1]) scoreBoard['Combo'].append(0) if scoreBoard['Combo'][-1]>0: comboBoard.content=str(int(scoreBoard['Combo'][-1])) TracePoint[index].begin(i0) scoreBoard[k]+=1 NotesClear.append(i) break else: continue break TracePoint[index].end() if event.type == music.get_endevent(): print(scoreBoard) return if EVENT_PRINT: print(event) def compute(dt): #計算位置 return TraceJudgeLineY*dt//moveTime if AUTO: for index in range(trace['Number']): for i,v in enumerate(Notes.register): k='Perfect' if v.type==noteType['Hold'] and time>=v.starttime: length=compute(v.endtime-time) v.surface.set_clip(pygame.Rect((0,0),(v.size[0],length))) if v.trace==index and time>=v.endtime: scoreBoard['Combo'][-1]+=1 comboBoard.content=str(int(scoreBoard['Combo'][-1])) TracePoint[index].trigger(0) scoreBoard[k]+=1 NotesClear.append(i) if len(hit_obj)>0 and time>hit_objTime-moveTime: t=assignTrace(hit_obj[-1].position[0]) #取得軌道 length=TraceJudgeLineY-compute(hit_objTime-time) pos=TraceSkin[t].rect.centerx-Notes.pos[0] if type(hit_obj[-1]) is slider.beatmap.HoldNote:#判斷現在讀取的hit_obj屬性是否為hold_note,然後生成出register endtime=eval(hit_obj[-1].addition.split(':')[0]) endlength=TraceJudgeLineY-compute(endtime-time) totalL=int((length-endlength)) reg=Register((pos-hnoteX//2,totalL-hnoteY//2),surface=pygame.transform.scale(hnote,(hnoteX,totalL))) reg.starttime=hit_objTime reg.endtime=endtime reg.time=(reg.starttime+endtime)//2 reg.height=reg.rect.centery reg.trace=t reg.type=noteType['Hold'] Notes.register.append(reg) reg=Register((pos-noteX//2,length-noteY//2),surface=note) reg.starttime=hit_objTime reg.endtime=hit_objTime reg.time=hit_objTime reg.height=reg.rect.centery reg.trace=t reg.type=noteType['Down'] Notes.register.append(reg) reg=Register((pos-noteX//2,endlength-noteY//2),surface=note) reg.starttime=endtime reg.endtime=endtime reg.time=endtime reg.height=reg.rect.centery reg.trace=t reg.type=noteType['Up'] Notes.register.append(reg) else: #判斷現在讀取的hit_obj屬性是否為note,然後生成出register reg=Register((TraceSkin[t].rect.centerx-noteX//2-Notes.pos[0],length-noteY//2),surface=note) reg.starttime=hit_objTime reg.endtime=hit_objTime reg.time=hit_objTime reg.height=reg.rect.centery reg.trace=t reg.type=noteType['Down'] Notes.register.append(reg) hit_obj.pop() try: #先嘗試計算下一個欲掉落物件的時間 hit_objTime=hit_obj[-1].time.total_seconds()*1000 except: pass for index,key in enumerate(self.KEY): TracePoint[index].update(10) if not key: #如果按鍵按下 for i,v in enumerate(Notes.register): if v.trace!=index or v.type != noteType['Hold']: #判斷掉落物件是否為hold屬性 continue if v.type==noteType['Hold'] and time>=v.starttime: length=TraceJudgeLineY*(v.endtime-time)//moveTime v.surface.set_clip(pygame.Rect((0,0),(v.size[0],length))) #把超出範圍的圖形,利用set_clip切割掉不顯示 if time >v.endtime: TracePoint[index].trigger(0) #觸發特效(0代表perfect) NotesClear.append(i) #把要刪除的index丟入垃圾桶 break for i,v in enumerate(Notes.register): #判定掉落物件是否超出判定線 v.rect.centery=TraceJudgeLineY-compute(v.time-time) if v.rect.centery>=TraceJudge.rect.centery and time-v.endtime>timeBoard['Miss']: #判定物件位置超出Miss的預設值 scoreBoard['Miss']+=1 if scoreBoard['Combo'][-1]>0:scoreBoard['Combo'].append(0) #combo設定為0 comboBoard.content="" NotesClear.append(i) NotesClear.sort(reverse=1) #把欲清除的list排列 for i in NotesClear: del Notes.register[i] #清理垃圾桶 comboBoard.pos=(self.size-comboBoard.size)//2 #置中comboBoard comboBoard.update() Notes.clear() Notes.blit() if not all(self.size-screen.get_size()):#判斷self.size與預設大小1366*768是否相同,若相同則直接把內容顯示出來 screen.fill((128,128,128)) screen.blits([(sur.surface,sur.pos,sur.surface.get_clip(),BLEND_ALPHA_SDL2) for sur in self.register]) else:#調整視窗大小,避免因調整而座標系統跑掉 self.clear() self.blit() BlitToWindow(self.surface) pygame.display.flip()
# Változók és konstansok definiálása: index = 0 # első zeneszám beállítása vol = 0.5 # kezdeti nagerő érték playing = "" # kezdeti lejtászás státusz g = (0, 100, 0) # Green b = (0, 0, 0) # Black musicpath = os.path.join(sys.path[0], "music") # platform függtlen elérési út definiálása l = [] # számok listája SONG_END = pygame.USEREVENT + 1 # szám vége esemény definiálása mp3.set_endevent(SONG_END) # Fügvények: def displayCL(): #conslo-ra és logba írás egyszerűsítése global l global index newlogline("Playing:") newlogline(l[index]) print("Playing:") print(l[index]) print("Next:") newlogline("Next:") if index == lSize - 1: # index határérték kezelése print(l[0]) newlogline(l[0])