Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
#
#---------------------------------------------------------------------------

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
Ejemplo n.º 4
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"
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
#
#---------------------------------------------------------------------------

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
Ejemplo n.º 7
0
__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'
Ejemplo n.º 8
0
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')
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0

# 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])