[Sugar-devel] Object Chooser (selecting user-created audio objects from the Journal)

Aleksey Lim alsroot at member.fsf.org
Fri Dec 24 05:50:34 EST 2010


On Thu, Dec 23, 2010 at 08:56:15PM -0500, Art Hunkins wrote:
> Aleksey: Thanks so much for your suggestions/corrections. And Walter: thanks 
> equally for posting these ideas to the wiki.
> 
> Aleksey: Please take a look at this further refinement of the Chooser 
> method:
> 
>  def choose(self, widget):
>   chooser =  ObjectChooser(parent=self, what_filter=mime.GENERIC_TYPE_AUDIO)
>   result = chooser.run()
>   if result == gtk.RESPONSE_ACCEPT:
>     self.jobject = chooser.get_selected_object()
>     self.path = str(self.jobject.get_file_path())
>   else:
>     self.jobject = None
>     self.path = "0"
> 
> It is essential that if the Journal is closed without a selection, that the 
> default values (for self.jobject and self.path) be reset.
> 
> Also, the user needs to be able to change his mind - to make a second 
> selection, as well as to revert to the default.
> 
> Is the above code a fairly good way of achieving this?

Sure.

> Also, I'd like to find a way to limit the selected Journal object to an 
> *audio* file, one included in mime.GENERIC_TYPE_AUDIO - and (likewise) to 
> revert to default values if such a selection is not made.
> 
> Do you see a fairly simple way of making such a "filter"? I'd rather not get 
> into specifying all specific file types (except, if feasible, to rule out 
> ogg speex).

Unfortunately, it is impossible with current ObjectChooser
implementation (there should be a ticket on bugs.sl.o with proposal how
it might be implemented).

> Once again, thanks for your insights.
> 
> Art Hunkins
> 
> ----- Original Message ----- 
> From: "Aleksey Lim" <alsroot at member.fsf.org>
> To: "Art Hunkins" <abhunkin at uncg.edu>
> Cc: <Sugar-devel at lists.sugarlabs.org>
> Sent: Wednesday, December 22, 2010 1:22 AM
> Subject: Re: [Sugar-devel] Object Chooser (selecting user-created audio 
> objects from the Journal)
> 
> 
> > 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 
> 
> 

-- 
Aleksey


More information about the Sugar-devel mailing list