Re: Mac python programming

  • From: Dave <davidct1209@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Sun, 2 Jan 2011 17:28:57 -0800

Also, I changed up my server to use the server's stdin to receive
text.  Doing this via COcoa framework's to receive the callbacks when
line's are received (via FileObserver's).

On 1/2/11, Dave <davidct1209@xxxxxxxxx> wrote:
> Thanks for the tip with mac ports and installing emacs through it.
> Nice to have the dependencies pulled in for you.
>
> I've got emacspeak talking with a quick hack of dtk-speak.el.  It's
> still passing over tts param's (pertaining to outloud which is the
> default); gotta fix that and then figure out how to parse those
> embeded commands.
>
> Otherwise, responsiveness is incredibly good; Alex just happens to be
> super wrt latency so it's not a surprise.  Btw, characters seem to be
> handled properly.
>
> On 1/2/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>> Nod which is why I started and will make this server in python first then
>> once I have it in python I can quickly convert it over.
>>
>> Ken
>>
>> -----Original Message-----
>> From: programmingblind-bounce@xxxxxxxxxxxxx
>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Dave
>> Sent: Sunday, January 02, 2011 3:02 PM
>> To: programmingblind@xxxxxxxxxxxxx
>> Subject: Re: Mac python programming
>>
>> Ken,
>>
>> I think you misunderstood me.  You can make C++ calls within objective
>> C methods (i.e.
>>
>> - (void)foobar {
>> std::vector<std::string> x;
>> x.push_back("asdf");
>> MyCppClass.DoSomething();
>> }
>>
>> I understand the argument convention's kinda funky, but it actually
>> serves to self document the code
>> i.e.
>> [foobar performActionWtihName:bla forObject:bbla2 withTime:10
>> inYear:2010 etc:blabla];
>>
>> Requires retuning of our "speech" delimiters when we parse it with our
>> ears
>> :).
>>
>> On 1/2/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>>> No it is not the same difference since c++ and python at least have
>>> arguments and functions like I like I just have never liked the [object
>>> argument1: argument 2: argument3 ] type of function naming.
>>>
>>> Ken
>>>
>>> -----Original Message-----
>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Dave
>>> Sent: Sunday, January 02, 2011 1:11 PM
>>> To: programmingblind@xxxxxxxxxxxxx
>>> Subject: Re: Mac python programming
>>>
>>> That's macports I assume?
>>>
>>> Also, objective C interoperates pretty well with C++ (only notable
>>> exception is that an objc class can't inherit from a C++ class and
>>> vice versa).  If you're messing about with emacspeak (and probably
>>> then lisp), instead of paren's, you're using brackets (same
>>> difference? sorta except for prefix operators in lisp).
>>>
>>> On 1/2/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>>>> Well it doesn't have to be objective c there are direct libraries to
>>>> c++
>>> as
>>>> well.  I will decide if I want to mess with those funcky function
>>>> headers
>>> or
>>>> not. I used to code in objective c some in linux so maybe it won't hurt
>>> too
>>>> much to think with brackets again.  First thing is first though I want
>>>> to
>>>> get this simple python ttsserver working so I can test it if it feels
>>>> sluggish then I will think about converting it to some binary language.
>>> Too
>>>> bad the speechSynthisizer class doesn't seem to have a speak by
>> character.
>>>> I guess I could convert the character to a phoneme.
>>>>
>>>>
>>>> As for how I made it I just downloaded the may 2010 bz2 file and did
>>>> make
>>>> config and make and it compiled as if I was on linux with no problems.
>>>>
>>>> Now I have to point out that I have ports installed which is where I
>>>> get
>>>> emacs and all the linux tools like bison flex etc from.  It seems to be
>>>> working though.
>>>>
>>>> Ken
>>>> -----Original Message-----
>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Dave
>>>> Sent: Sunday, January 02, 2011 12:35 PM
>>>> To: programmingblind@xxxxxxxxxxxxx
>>>> Subject: Re: Mac python programming
>>>>
>>>> That's good news; I haven't messed about with building emacspeak (my
>>>> speech server had been used for another project).  Which build file
>>>> did you use (I think the main build target tries to build the linux
>>>> based speech servers as well)?
>>>>
>>>> I dug into emacspeak sources a bit and seems fairly easy to get it all
>>>> working.  It looks like you just need to modify dtk-speak.el to be
>>>> aware of the mac os server.  Looks like the lisp layer communicates
>>>> with the server via (process-send-string ) which sends the string to
>>>> the process using stdin.
>>>>
>>>> The way to go imo for efficiency is to write the server is native
>>>> objective c and link against appkit directly.
>>>>
>>>> On 1/2/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>>>>>
>>>>>
>>>>> Ok I had to try it before I get back to work on Monday.  I just got
>>>>> emacspeak to compile with no problems. Well I say no problems but
>>>>> there
>>>> were
>>>>> about 8 warnings of packages I did not have installed to emacs but
>>>>> they
>>>> were
>>>>> either all lisp packages or they could be replace for example it said
>>>>> I
>>>>> didn't have w3.  I just installed w3m which I think works fine with
>>>>> emacspeak since it works fine with emacs.  If not I will go get the
>> older
>>>>> w3.el sources.  Of course none of the packages it warned about really
>>> will
>>>>> break emacspeak it just will not allow me to do a couple things till I
>>> get
>>>>> them installed.  So anyway I now have emacspeak compiled but I have
>>>>> not
>>>>> installed it yet because I want to see if I can jerry rig it to take
>>>>> my
>>>>> ttsserver.  Heck I might even dump python all together and rewrite
>>>>> what
>> I
>>>>> have done in c++ for speed but we will see because I would rather get
>>>>> it
>>>> to
>>>>> work first then make it faster.  At this rate though maybe I can get
>>>>> emacspeak talking next weekend.
>>>>>
>>>>> I also want to see if I can find a way to have emacsspeak run in
>>>>> console
>>>>> output mode or something where it will write the text it would send to
>>>>> a
>>>>> file that would  be helpful.
>>>>>
>>>>> Ken
>>>>>
>>>>> -----Original Message-----
>>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Dave
>>>>> Sent: Sunday, January 02, 2011 1:20 AM
>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>> Subject: Re: Mac python programming
>>>>>
>>>>> It's been a while lol...but looks like I went down the same road
>>>>> before.  Here's my take on a server before.  Mac has a native
>>>>> messaging loop (not sure what it is in terms of py objc context), but
>>>>> in objc it's NSRunLoop.  Looks like you've found it though in
>>>>> apphelper.
>>>>>
>>>>> This server uses an http server to receive text from a client.  Also,
>>>>> would be interested in your luck compiling emacspeak on Snow Leopard.
>>>>>
>>>>>
>>>>> """ begin server
>>>>> """
>>>>> import string,cgi,time, urllib
>>>>> from os import curdir, sep, system
>>>>> from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
>>>>> from AppKit import NSObject
>>>>> from AppKit import NSSpeechSynthesizer
>>>>> """ WebServer
>>>>> This script starts an http server and utilizes the Mac OS X speech
>>>>> synthesis framework to generate speech received through the browser as
>>>>> an url.
>>>>> """
>>>>> class SpeechSynthesizerDelegate(NSObject):
>>>>>  def speechSynthesizer_didFinishSpeaking_(self, synthesizer, success):
>>>>>    sys.stdout.write("finished speaking")
>>>>>
>>>>> class MyHandler(BaseHTTPRequestHandler):
>>>>>  speechSynthesizer = NSSpeechSynthesizer.alloc().init()
>>>>>  delegate_ = SpeechSynthesizerDelegate.alloc().init();
>>>>>
>>>>>  def __init__(self, request, client_address, socket):
>>>>>      MyHandler.speechSynthesizer.setRate_(500)
>>>>>      MyHandler.speechSynthesizer.setDelegate_(MyHandler.delegate_)
>>>>>      BaseHTTPRequestHandler.__init__(self, request, client_address,
>>>> socket)
>>>>>
>>>>>  def do_GET(self):
>>>>>
>>>>>
>>>>
>>>
>>  MyHandler.speechSynthesizer.startSpeakingString_(urllib.unquote(self.path))
>>>>>
>>>>> def main():
>>>>>  try:
>>>>>      server = HTTPServer(('', 80), MyHandler)
>>>>>      print 'started http server...'
>>>>>      server.serve_forever()
>>>>>  except KeyboardInterrupt:
>>>>>      print '^C received, shutting down server'
>>>>>      server.socket.close()
>>>>>
>>>>> if __name__ == '__main__':
>>>>>  main()
>>>>>
>>>>>
>>>>> On 1/1/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>>>>>> Oh one more thing Dave.  I was planning to replace the main function
>>> part
>>>>>> with a socket loop that would take from the stdin and from a tcip
>> socket
>>>>>> like the protocol says I just wanted to make sure the simple stuff
>>> worked
>>>>>> first.  I didn't see a character speak method in NSSpeechSynthesizer
>>>>> either
>>>>>> did you?  If not this his how I would add the function to that script
>>>>>> I
>>>>> just
>>>>>> sent you to speak a character...  If you add this right after the
>>> tts_say
>>>>>> function this will make
>>>>>>
>>>>>> Ttsserver l <character>
>>>>>>
>>>>>> Work.
>>>>>>
>>>>>>
>>>>>> #l c for speaking characters
>>>>>> def l(text):
>>>>>>     voice = NSSpeechSynthesizer.defaultVoice()
>>>>>>     speech = NSSpeechSynthesizer.alloc().initWithVoice_(voice)
>>>>>>     speech.setDelegate_(SpeechDelegate.alloc().init())
>>>>>>     speech.startSpeakingString_(text)
>>>>>> funcs['l']=l
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: programmingblind-bounce@xxxxxxxxxxxxx
>>>>>> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Dave
>>>>>> Sent: Saturday, January 01, 2011 9:05 PM
>>>>>> To: programmingblind@xxxxxxxxxxxxx
>>>>>> Subject: Re: Mac python programming
>>>>>>
>>>>>> Agreed on the crappy docs concerning this.
>>>>>>
>>>>>> Tried my hand at a speech server using py obj and had the *exact*
>>>>>> same
>>>>>> problem.
>>>>>> Of course, implementing the delegate (NSSpeechSynthesizerDelegate if
>>>>>> memory serves), with all methods of the protocol yields no errors at
>>>>>> runtime; it simply just doesn't work.
>>>>>> Would be curious to see if anyone has an answer as well.
>>>>>>
>>>>>> On 1/1/11, Ken Perry <whistler@xxxxxxxxxxxxx> wrote:
>>>>>>>
>>>>>>>
>>>>>>> Has anyone created a command line application and made use of
>> delegates
>>>>>> with
>>>>>>> pyobjc under Mac?  I am working on a project that uses the
>>>>>>> NSSpeechSynthesizer  class in coco and I can make the program talk
>> fine
>>>>>> but
>>>>>>> I am not getting the didFinishSpeaking delegate message. If you know
>>>> what
>>>>>> I
>>>>>>> am talking about I can send you some simple sample code to check and
>>> see
>>>>>> if
>>>>>>> I am doing this correct.  I have to say the pyobjc documentation and
>>>>>> sample
>>>>>>> programs suck.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Ken
>>>>>>>
>>>>>>>
>>>>>> __________
>>>>>> View the list's information and change your settings at
>>>>>> //www.freelists.org/list/programmingblind
>>>>>>
>>>>>> __________
>>>>>> View the list's information and change your settings at
>>>>>> //www.freelists.org/list/programmingblind
>>>>>>
>>>>>>
>>>>> __________
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/programmingblind
>>>>>
>>>>>
>>>>> __________
>>>>> View the list's information and change your settings at
>>>>> //www.freelists.org/list/programmingblind
>>>>>
>>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>> __________
>>>> View the list's information and change your settings at
>>>> //www.freelists.org/list/programmingblind
>>>>
>>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>>
>>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>>
>>
>
__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: