1 # -*- coding: utf-8 -*-
10 from pgu
.gui
import Desktop
11 from pgu
.gui
import QUIT
12 from minwii
.widgets
.launch
import LaunchScreen
13 from minwii
.widgets
.home
import Home
14 from minwii
.widgets
.playingscreen
import SongPlayingScreen
, PlayingScreen
15 from minwii
.widgets
.instrumentselector
import InstrumentSelector
16 from minwii
.synth
import Synth
17 from minwii
.eventutils
import EventDispatcher
18 from minwii
.musicxml
import musicXml2Song
19 from minwii
.config
import SONG_FILE_PATH
20 from minwii
.config
import SCREEN_RESOLUTION
21 from minwii
.globals import PLAYING_MODES_DICT
22 from minwii
.log
import console
, LOG_FORMAT_VERSION
, envLogger
27 def __init__(self
, wiimoteSupport
=True, fullscreen
=False) :
28 envLogger
.info('winwii log format version : %s', LOG_FORMAT_VERSION
)
29 self
.wiimoteSupport
= wiimoteSupport
30 self
.fullscreen
= fullscreen
34 self
.screenResolution
= SCREEN_RESOLUTION
35 envLogger
.info('résolution écran : %s', self
.screenResolution
)
40 def initWiimotes(self
) :
41 if self
.wiimoteSupport
:
42 from pywiiuse
import pygame_wiimouse
43 from minwii
.config
import IR_POSITION
44 pygame_wiimouse
.init(4, 5, self
.screenResolution
, IR_POSITION
) # look for 4, wait 5 seconds
45 self
.nwiimotes
= nwiimotes
= pygame_wiimouse
.get_count()
46 console
.debug('wiimotes found : %d', nwiimotes
)
47 self
.WT
= WT
= pygame_wiimouse
.WT
53 "séquençage de l'affichage des écrans"
56 displayFlags
= displayFlags | pygame
.FULLSCREEN
57 pygame
.display
.set_mode(self
.screenResolution
, displayFlags
)
58 pygame
.display
.set_caption('MINWii')
61 songFile
, playMode
, wiimoteIndex
= '', 'NORMAL', 0
65 exit
, songFile
, playMode
, wiimoteIndex
= \
66 self
.selectSongAndOptions(songFile
, playMode
, wiimoteIndex
)
69 WT
.selectWiimote(wiimoteIndex
)
72 instrumentDescription
= self
.selectInstrument()
73 if not instrumentDescription
:
77 self
.runPlayingScreen(songFile
, playMode
, instrumentDescription
)
82 def selectSongAndOptions(self
, songFile
, playMode
, wiimoteIndex
) :
83 """ lance l'écran de paramétrage et retourne un tuple comportant :
84 - drapeau de sortie de l'application (booléen)
85 - chemin du fichier de la chanson
87 - wiimote sélectionnée (entier)
89 home
= Home(songPath
=SONG_FILE_PATH
,
92 wiimoteIndex
=wiimoteIndex
,
93 nwiimotes
=self
.nwiimotes
)
95 home
.connect(QUIT
, app
.quit
)
101 console
.debug("sortie de l'application")
103 actual_wiimotes
= self
.WT
.get_count()
105 self
.firstSong
= False
107 envLogger
.info('NEW_LOG_FILE')
108 console
.info('chanson : %s', home
.songFile
)
109 console
.info('mode : %s', home
.modeSelect
.value
)
110 if actual_wiimotes
is None :
111 console
.info('HID : souris')
112 elif actual_wiimotes
== 0 :
113 console
.info('HID : souris (pas de wiimote trouvée)')
115 console
.info('HID : wiimote %d', home
.selectedWiimote
.value
+ 1)
118 return (home
.exitApp
,
120 home
.selectedPlayMode
,
121 home
.selectedWiimoteIndex
)
123 def selectInstrument(self
) :
124 """ lance l'écran de sélection de l'instrument et retourne
125 un dictionnaire comportant la description de l'instrument
127 selector
= InstrumentSelector()
131 EventDispatcher
.reset()
132 instru
= selector
.selectedInstrument
134 console
.info('instrument : %s', instru
['name'])
135 console
.info('preset : %d', instru
['preset'])
136 console
.info('bank : %d', instru
['bank'])
137 console
.info('ajustement octave : %d', instru
['octave'])
140 def runPlayingScreen(self
, songFile
, playMode
, instrumentDescription
) :
141 """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode'
142 avec l'instrument midi 'instrumentDescription'.
144 playMode
= PLAYING_MODES_DICT
[playMode
]
145 song
= musicXml2Song(songFile
)
146 bank
, preset
= instrumentDescription
['bank'], instrumentDescription
['preset']
147 octave
= instrumentDescription
['octave']
148 self
.synth
.adjust_octave(0, octave
)
149 self
.synth
.program_select(0, bank
, preset
)
150 playingScreen
= SongPlayingScreen(self
.synth
, song
, mode
=playMode
)
153 EventDispatcher
.reset()
157 """ Classe utilitaire pour singer l'api
158 de pygame_wiimouse en cas d'abscence de wiimote.
160 selectWimoteIndex
= 0
165 def selectWiimote(self
, i
):
167 def get_count(self
) :