Free the sound device when the startup when the sound has been played.

Factored out to a separate sound module from cjb patch.
This commit is contained in:
Marco Pesenti Gritti 2007-11-02 11:04:41 +01:00
parent 70079de872
commit d445bc086d
3 changed files with 47 additions and 4 deletions

View File

@ -25,10 +25,10 @@ import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
import gobject import gobject
import gst
from sugar import env from sugar import env
from sugar import logger from sugar import logger
from sugar import sound
from sugar.profile import get_profile from sugar.profile import get_profile
sys.path.insert(0, env.get_shell_path()) sys.path.insert(0, env.get_shell_path())
@ -89,9 +89,7 @@ def _shell_started_cb():
startup_sound = os.path.join(env.get_data_path('startup.flac')) startup_sound = os.path.join(env.get_data_path('startup.flac'))
if os.path.exists(startup_sound): if os.path.exists(startup_sound):
player = gst.element_factory_make("playbin", "player") sound.play(startup_sound)
player.set_property("uri", "file://" + startup_sound)
player.set_state(gst.STATE_PLAYING)
def main(): def main():
gobject.idle_add(_shell_started_cb) gobject.idle_add(_shell_started_cb)

View File

@ -5,6 +5,7 @@ sugar_PYTHON = \
env.py \ env.py \
network.py \ network.py \
profile.py \ profile.py \
sound.py \
util.py \ util.py \
wm.py wm.py

44
lib/sugar/sound.py Normal file
View File

@ -0,0 +1,44 @@
# Copyright (C) 2007 One Laptop Per Child
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
import logging
import gst
class Player(object):
def __init__(self):
self._player = gst.element_factory_make("playbin", "player")
bus = self._player.get_bus()
bus.add_signal_watch()
bus.connect("message::eos", self.__eos_cb)
bus.connect("message::error", self.__error_cb)
def play(self, sound_path):
self._player.set_property("uri", "file://" + sound_path)
self._player.set_state(gst.STATE_PLAYING)
def __eos_cb(self, bus, message):
self._player.set_state(gst.STATE_NULL)
def __error_cb(self, bus, message):
logging.error(message.parse_error())
_player = Player()
def play(sound_path):
_player.play(sound_path)