Skip to content

Commit

Permalink
Remove the mixer reinitialization part of song slowdown.
Browse files Browse the repository at this point in the history
  • Loading branch information
stump committed Dec 27, 2012
1 parent 23d7d06 commit d1d8b27
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 87 deletions.
26 changes: 2 additions & 24 deletions src/GameEngine.py
Expand Up @@ -229,11 +229,7 @@ def __init__(self, config = None):
bits = self.config.get("audio", "bits")
stereo = self.config.get("audio", "stereo")
bufferSize = self.config.get("audio", "buffersize")

self.frequency = frequency #MFH - store this for later reference!
self.bits = bits
self.stereo = stereo
self.bufferSize = bufferSize
self.audio.open(frequency = frequency, bits = bits, stereo = stereo, bufferSize = bufferSize)

self.cmdPlay = 0
self.cmdMode = None
Expand All @@ -243,9 +239,7 @@ def __init__(self, config = None):
self.gameStarted = False
self.world = None

#MFH - TODO - Audio speed divisor needs to be changed to audio speed factor, so can support 0.75x (3/4 speed)
self.audioSpeedFactor = 0
self.setSpeedFactor(1) #MFH - handles initialization at full speed
self.audioSpeedFactor = 1.0

Log.debug("Initializing video.")
#myfingershurt: ensuring windowed mode starts up in center of the screen instead of cascading positions:
Expand Down Expand Up @@ -383,22 +377,6 @@ def __init__(self, config = None):
Log.debug("Ready.")


def setSpeedFactor(self, factor):
'''
allows for slowing down streaming audio tracks
@param factor:
'''
if self.audioSpeedFactor != factor: #MFH - don't re-init to the same divisor.
try:
self.audio.close() #MFH - ensure no audio is playing during the switch!
self.audio.pre_open(frequency = int(self.frequency*factor), bits = self.bits, stereo = self.stereo, bufferSize = self.bufferSize)
self.audio.open(frequency = int(self.frequency*factor), bits = self.bits, stereo = self.stereo, bufferSize = self.bufferSize)
self.audioSpeedFactor = factor
pygame.init()
Log.debug("Initializing pygame.mixer & audio system at " + str(self.frequency*factor) + " Hz." )
except Exception:
Log.error("Failed to initialize or re-initialize pygame.mixer & audio system - crash imminent!")

# evilynux - This stops the crowd cheers if they're still playing (issue 317).
def quit(self):
# evilynux - self.audio.close() crashes when we attempt to restart
Expand Down
2 changes: 0 additions & 2 deletions src/GameResultsScene.py
Expand Up @@ -213,8 +213,6 @@ def __init__(self, engine, libraryName, songName, scores = None, coOpType = Fals
self.singleView = True

slowdown = self.engine.audioSpeedFactor
# evilynux - Reset speed
self.engine.setSpeedFactor(1.0)

a = len(Scorekeeper.HANDICAPS)
for i, scoreCard in enumerate(self.scoring):
Expand Down
6 changes: 0 additions & 6 deletions src/GuitarScene.py
Expand Up @@ -2022,8 +2022,6 @@ def quit(self):
self.song.stop()
self.resetVariablesToDefaults()
self.done = True
# evilynux - Reset speed
self.engine.setSpeedFactor(1.0)

self.engine.view.setViewport(1,0)
self.engine.view.popLayer(self.menu)
Expand All @@ -2050,8 +2048,6 @@ def changeSong(self):
self.song.stop()
self.song = None
self.resetVariablesToDefaults()
# evilynux - Reset speed
self.engine.setSpeedFactor(1.0)
self.engine.view.setViewport(1,0)
self.engine.view.popLayer(self.menu)
self.engine.view.popLayer(self.failMenu)
Expand All @@ -2064,8 +2060,6 @@ def changeAfterFail(self):
self.song.stop()
self.song = None
self.resetVariablesToDefaults()
# evilynux - Reset speed
self.engine.setSpeedFactor(1.0)

self.engine.view.setViewport(1,0)
self.engine.view.popLayer(self.failMenu)
Expand Down
79 changes: 24 additions & 55 deletions src/Song.py
Expand Up @@ -2275,6 +2275,10 @@ def __init__(self, engine, infoFileName, songTrackName, guitarTrackName, rhythmT
scriptReader = ScriptReader(self, open(scriptFileName))
scriptReader.read()

# set playback speed
if self.engine.audioSpeedFactor != 1.0:
self.setSpeed(self.engine.audioSpeedFactor)

@property
def length(self):
length = 0
Expand Down Expand Up @@ -2326,17 +2330,12 @@ def play(self, start = 0.0):

#RF-mod No longer needed?

if self.engine.audioSpeedFactor == 1: #MFH - shut this track up if slowing audio down!
self.songTrack.setPosition(start / 1000.0)
self.songTrack.play()
if self.singleTrackSong:
self.songTrack.setVolume(self.activeVolume)
else:
self.songTrack.setVolume(self.backVolume)
self.songTrack.setPosition(start / 1000.0)
self.songTrack.play()
if self.singleTrackSong:
self.songTrack.setVolume(self.activeVolume)
else:
self.songTrack.setPosition(start / 1000.0)
self.songTrack.play()
self.songTrack.setVolume(0.0)
self.songTrack.setVolume(self.backVolume)

if self.guitarTrack:
assert start == 0.0
Expand Down Expand Up @@ -2475,6 +2474,18 @@ def stop(self):
self.crowdTrack.stop()
self._playing = False

def setSpeed(self, speed):
if self.songTrack:
self.songTrack.setSpeed(speed)
if self.guitarTrack:
self.guitarTrack.setSpeed(speed)
if self.rhythmTrack:
self.rhythmTrack.setSpeed(speed)
if self.drumTrack:
self.drumTrack.setSpeed(speed)
if self.crowdTrack:
self.crowdTrack.setSpeed(speed)

def fadeout(self, time):
for tracks in self.tracks:
for track in tracks:
Expand Down Expand Up @@ -2503,29 +2514,12 @@ def getPosition(self):
else:
pos = self.songTrack.getPosition() * 1000.0


if self.engine.audioSpeedFactor != 1: #MFH - to correct for slowdown's positioning
#pos /= self.engine.audioSpeedFactor
pos *= self.engine.audioSpeedFactor

if pos < 0.0:
pos = 0.0
return pos + self.start - self.delay
return pos - self.delay

def isPlaying(self):
#MFH - check here to see if any audio tracks are still playing first!
#MFH from the Future sez: but only if in slowdown mode!
if self.engine.audioSpeedFactor == 1:
return self._playing and self.songTrack.isPlaying()
else: #altered speed mode!
if self.guitarTrack and self.guitarTrack.isPlaying():
return True
if self.rhythmTrack and self.rhythmTrack.isPlaying():
return True
if self.drumTrack and self.drumTrack.isPlaying():
return True
else:
return self._playing and self.songTrack.isPlaying()
return self._playing and self.songTrack.isPlaying()

def getBeat(self):
return self.getPosition() / self.period
Expand Down Expand Up @@ -3419,32 +3413,7 @@ def loadSong(engine, name, library = DEFAULT_LIBRARY, seekable = False, playback
slowDownFactor = practiceSpeed
else:
slowDownFactor = engine.config.get("audio", "speed_factor")
engine.setSpeedFactor(slowDownFactor) #MFH


#MFH - check for slowdown mode here. If slowdown, and single track song (or practice mode),
# duplicate single track to a streamingAudio track so the slowed down version can be heard.
if engine.audioSpeedFactor != 1:
crowdFile = None
#count tracks:
audioTrackCount = 0
if guitarFile:
audioTrackCount += 1
if rhythmFile:
audioTrackCount += 1
if drumFile:
audioTrackCount += 1
if audioTrackCount < 1:
if part[0] == parts[GUITAR_PART] or part[0] == parts[PRO_GUITAR_PART]:
guitarFile = songFile
elif part[0] == parts[BASS_PART]:
rhythmFile = songFile
elif part[0] == parts[DRUM_PART] or part[0] == parts[PRO_DRUM_PART]:
drumFile = songFile
else:
guitarFile = songFile


engine.audioSpeedFactor = slowDownFactor


if playbackOnly:
Expand Down

0 comments on commit d1d8b27

Please sign in to comment.