From c96694fce7eebd63a7b1abe27446d677e08a5af0 Mon Sep 17 00:00:00 2001 From: Simon Schampijer Date: Mon, 16 Jul 2007 15:24:39 +0000 Subject: Added support for sound to the memorize activity using csound. --- diff --git a/csound/csoundserver.py b/csound/csoundserver.py index 6e7c815..c8c799f 100644 --- a/csound/csoundserver.py +++ b/csound/csoundserver.py @@ -13,16 +13,18 @@ class CsoundServer(Thread): Thread.__init__(self) self.csound = csnd.Csound() - def start(self): + def start(self): self.perf = csnd.CsoundPerformanceThread(self.csound) uniorcpath = os.path.join( os.path.dirname(__file__), 'univorc.csd') if not os.path.exists(uniorcpath): _logger.error('univorc not found %s'%uniorcpath) else: - self.csound.Compile(uniorcpath) + if self.csound.Compile(uniorcpath) == -1: + _logger.debug('error compiling csound orchestra %s'%uniorcpath) + return 1 self.perf.Play() - _logger.debug('start csound performance %s'%uniorcpath) - + return 0 + def pause(self): self.perf.Stop() self.perf.Join() diff --git a/csound/univorc.csd b/csound/univorc.csd index e4264e9..3851ca3 100644 --- a/csound/univorc.csd +++ b/csound/univorc.csd @@ -1,6 +1,6 @@ --+rtaudio=alsa -odac -m0 -d -b1024 -B4096 +-+rtaudio=alsa -odac -m0 -d -b2048 -B4096 sr=22050 diff --git a/game.py b/game.py index 9d554f1..a07b428 100755 --- a/game.py +++ b/game.py @@ -22,6 +22,7 @@ import random import logging import gobject import time +import gtk from sugar import profile from dbus.service import method, signal @@ -71,6 +72,24 @@ class MemorizeGame(gobject.GObject): self.messenger = None self.sentitive = True self.model = Model(os.path.dirname(__file__)) + + # create csound instance to play sound files + self.sound = 0 + try: + import csnd + self.sound = 1 + _logger.error(' [Check for module csnd] found.') + except: + _logger.error(' [Check for module csnd] not found. There will be no sound.') + + if self.sound == 1: + from csound.csoundserver import CsoundServer + self.cs = CsoundServer() + gtk.gdk.threads_init() + if self.cs.start() != 0: + _logger.error(' Error starting csound performance.') + self.sound = 0 + def load_game(self, game_name, size): if self.model.read(game_name) == 0: @@ -122,7 +141,16 @@ class MemorizeGame(gobject.GObject): if self.last_flipped <> -1 and id < (len(self.model.grid)/2): return self.model.data['running'] = 'True' - + + # play sound in any case if available + if self.sound == 1: + snd = self.model.grid[id].get('snd', None) + if snd == None: + _logger.debug('Audio: no sound in this game.') + else: + self.cs.perform('i 108 0.0 3.0 "%s" 1 0.9 0.5 0'%(snd)) + _logger.debug('Audio: play sound=%s'%snd) + # First card case if self.last_flipped == -1: self.last_flipped = id @@ -140,7 +168,7 @@ class MemorizeGame(gobject.GObject): self.emit('set-border', self.last_flipped, stroke_color, fill_color) self.increase_point(self.current_player) self.model.grid[id]['state'] = '1' - self.emit('flip-card', id) + self.emit('flip-card', id) if self.model.data['divided'] == '1': self.card_highlighted(widget, -1, False) if not signal: diff --git a/games/drumgit/drumgit.mson b/games/drumgit/drumgit.mson index 4498ae5..bd5a9a4 100644 --- a/games/drumgit/drumgit.mson +++ b/games/drumgit/drumgit.mson @@ -16,8 +16,8 @@ - - + + diff --git a/model.py b/model.py index 1023776..d068e89 100644 --- a/model.py +++ b/model.py @@ -221,7 +221,8 @@ class Model(object): if self.pairs[key].props.aimg != None: elem['img'] = os.path.join(self.data['pathimg'], self.pairs[key].props.aimg) if self.pairs[key].props.asnd != None: - elem['snd'] = os.path.join(self.data['pathsnd'], self.pairs[key].props.asnd) + if os.path.isfile(os.path.join(self.data['pathsnd'], self.pairs[key].props.asnd)): + elem['snd'] = os.path.join(self.data['pathsnd'], self.pairs[key].props.asnd) if self.pairs[key].props.achar != None: elem['char'] = self.pairs[key].props.achar elem['charalign'] = self.pairs[key].props.acharalign @@ -235,7 +236,8 @@ class Model(object): if self.pairs[key].props.bimg != None: elem['img'] = os.path.join(self.data['pathimg'], self.pairs[key].props.bimg) if self.pairs[key].props.bsnd != None: - elem['snd'] = os.path.join(self.data['pathsnd'], self.pairs[key].props.bsnd) + if os.path.isfile(os.path.join(self.data['pathsnd'], self.pairs[key].props.bsnd)): + elem['snd'] = os.path.join(self.data['pathsnd'], self.pairs[key].props.bsnd) if self.pairs[key].props.bchar != None: elem['char'] = self.pairs[key].props.bchar elem['charalign'] = self.pairs[key].props.bcharalign -- cgit v0.9.1