Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2007-07-16 15:24:39 (GMT)
committer Simon Schampijer <simon@schampijer.de>2007-07-16 15:24:39 (GMT)
commitc96694fce7eebd63a7b1abe27446d677e08a5af0 (patch)
tree1ab08d0d57afd3342d53862f3cff8e310bc547d7
parent337c62d81809ce659d117a7535d83835633b01d8 (diff)
Added support for sound to the memorize activity using csound.
-rw-r--r--csound/csoundserver.py10
-rw-r--r--csound/univorc.csd2
-rwxr-xr-xgame.py32
-rw-r--r--games/drumgit/drumgit.mson4
-rw-r--r--model.py6
5 files changed, 43 insertions, 11 deletions
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 @@
<CsoundSynthesizer>
<CsOptions>
--+rtaudio=alsa -odac -m0 -d -b1024 -B4096
+-+rtaudio=alsa -odac -m0 -d -b2048 -B4096
</CsOptions>
<CsInstruments>
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 @@
<pair aimg="guitar4_2.jpg" asnd="flashcomp2b.aiff" bimg="guitar4_2.jpg" bsnd="flashcomp2b.aiff" color="100" />
<pair aimg="guitar5_2.jpg" asnd="gedaempft.aiff" bimg="guitar5_2.jpg" bsnd="gedaempft.aiff" color="100" />
- <pair aimg="guitar6_2.jpg" asnd="gedaempft.aiff" bimg="guitar6_2.jpg" bsnd="gedaempft.aiff" color="100" />
- <pair aimg="guitar7_2.jpg" asnd="ungedaempft.aiff" bimg="guitar7_2.jpg" bsnd="ungedaempft.aiff" color="100" />
+ <pair aimg="guitar6_2.jpg" asnd="ungedaempft.aiff" bimg="guitar6_2.jpg" bsnd="ungedaempft.aiff" color="100" />
+ <pair aimg="guitar7_2.jpg" asnd="git_hit1.aiff" bimg="guitar7_2.jpg" bsnd="git_hit1.aiff" color="100" />
<pair aimg="guitar8_2.jpg" asnd="jimi4.aiff" bimg="guitar8_2.jpg" bsnd="jimi4.aiff" color="100" />
</memosono>
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