[Sugar-devel] Object Chooser (selecting user-created audio objects from the Journal)
Aleksey Lim
alsroot at member.fsf.org
Wed Dec 22 01:22:24 EST 2010
On Tue, Dec 21, 2010 at 09:54:24PM -0500, Art Hunkins wrote:
> I'd like to thank all those who helped me get Object Chooser in the Journal
> up and running in my FileMix activity. I'd also like to share my results, in
> case the code could be helpful to others.
>
> Excerpts follow:
>
> from sugar.graphics.objectchooser import ObjectChooser
> from sugar import mime
>
> self.jname1 = "0"
> self.jobject1 = 0
>
> if os.path.exists("/etc/fedora-release"):
> release = open("/etc/fedora-release").read()
> if release.find("OLPC release 9 ") == -1:
> # Insert here code relevent to Sugar 0.84 and higher
> # I use this to only display Object Chooser callback buttons only for >=
> 0.84
> # Clicking one of the displayed buttons calls the choose1 method
>
> def choose1(self, widget):
> chooser = ObjectChooser(parent=self, what_filter=mime.GENERIC_TYPE_AUDIO)
> result = chooser.run()
> if result == gtk.RESPONSE_ACCEPT:
> jobject = chooser.get_selected_object()
> if jobject and jobject.file_path:
> self.jobject1 = jobject
> self.jname1 = str(jobject.get_file_path())
> else:
> self.jname1 = "0"
>
>
> Random observations:
>
> 1) I exclude Sugar 0.82 for two reasons (which means, unfortunately, "no
> user soundfiles for 0.82"):
Another useful way to check sugar version is:
try:
from jarabe import config
version = [int(i) for i in config.version.split('.')][:2]
except ImportError:
version = [0, 82]
if version >= [0, 84]:
...
> a) its version of Object Chooser does not allow filtering for the audio
> mime type;
> b) Sugar 0.82's Csound (5.08) - or more specifically its version of
> libsndfile - does not handle ogg vorbis soundfiles, the type that the Record
> activity creates. Record is the most likely/accessible means that children
> would use to create their own soundfiles. (The whole idea behind using
> Object Chooser here is to select user files that have been placed in the
> Journal [as Record does by default] for performance in FileMix.)
> c) In addition, earlier versions of Record (<v64 or so) create ogg SPEEX
> soundfiles; even the recent versions of Csound (actually, libsndfile) do not
> handle this (lo-fi) format.
>
> I found that a search for "OLPC release 9 " in /etc/fedora-release
> identifies all current 0.82 incarnations of Sugar of which I'm aware.
>
> 2) jname1 stores the soundfile name (complete path); jobject1 stores the
> object itself. This is key to being able (in Csound) to locate and load the
> selected soundfile. jname1 is then a channel opened to send the named
> soundfile to Csound.
You can make code more elegant by using only jobject1
(and None initializer):
self.jobject1 = None
...
if result == gtk.RESPONSE_ACCEPT:
...
self.jobject1 = jobject
...
if self.jobject1 is not None:
path = str(self.jobject1.get_file_path())
...
> 3) If the user closes the Object Chooser box instead of clicking on a sound
> object, the result is not accepted, and jname1 reverts to "0" - which is a
> flag (in Csound) to revert to the default soundfile included in FileMix.
>
> 4) The str() cast for self.jname1 converts the filename to the usual path
> format readable by Csound (this too is required).
Yeah, I guess it is dbus string object... maybe we need to this type
cast in sugar-toolkit code (though in most cases this casting should
happen implicitly).
>
> Art Hunkins
>
> _______________________________________________
> Sugar-devel mailing list
> Sugar-devel at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel
>
--
Aleksey
More information about the Sugar-devel
mailing list