Re: Mac python programming

  • From: Dave <davidct1209@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Sun, 2 Jan 2011 09:35:02 -0800

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

Other related posts: