Pythonで英語Excise第1段

ただいま英語勉強中につき、欲しいスクリプトPythonで書きました。

第1段、リストにした単語をひたすら発音ヤツ。

使い方

administrator@CF-T4 ~ $ vi words.list
administrator@CF-T4 ~ $ cat words.list | ./pronounce.py 
 -> apple..>.
 -> pie..>.
 -> pineapple..>.
 -> voice..>.
 -> interest..>>>>>.
 -> help..>.
 -> list..>.
 -> I..>.
 -> have..>.
 -> textbook..>.
 -> ..>.
 -> ..>.
 -> ..>.
 -> ..>.
 -> ..>.
 -> ..>^CTraceback (most recent call last):
  File "./pronounce.py", line 48, in <module>
    main()
  File "./pronounce.py", line 41, in main
    play_mp3(url)
  File "./pronounce.py", line 29, in play_mp3
    time.sleep(2)
KeyboardInterrupt

ソースコード

#!/usr/bin/env python

import urllib,urllib2
import sys,re,time,cStringIO
import pymedia.audio.acodec
import pymedia.muxer
import pymedia.audio.sound

end_point="http://dictionary.reference.com/browse/%s"

def play_mp3(url):
  snd=dec=None
  res = urllib2.urlopen(url)
  dm = pymedia.muxer.Demuxer("mp3")
  s = res.read(1024*200)
  while len(s):
    frames = dm.parse(s)
    if not dec:
      dec = pymedia.audio.acodec.Decoder(dm.streams[0])
    for fr in frames:
      r= dec.decode(fr[1])
      if not snd:
        snd= pymedia.audio.sound.Output(r.sample_rate,r.channels,
                                        pymedia.audio.sound.AFMT_S16_LE)
      sys.stderr.write(">")
      snd.play(r.data)
    s=res.read(len(s))
  res.close()
  time.sleep(2)
  while snd.isPlaying(): time.sleep( 0.1 )

def main():
  while True:
    word = sys.stdin.readline().strip()
    sys.stderr.write(" -> "+word)
    res = urllib2.urlopen(end_point%urllib.quote_plus(word))
    sys.stderr.write(".")
    try:
      url = urllib.unquote_plus(re.search(r"soundUrl=.*?&",res.read()).group()[9:-1])
      sys.stderr.write(".")
      play_mp3(url)
      sys.stderr.write(".")
      sys.stderr.write("\n")
    except AttributeError:
      print "Not found!"

if __name__=="__main__":
  main()