Groovyで声に出して読みたい Hello World

#ghello用

Eval.me("http://dl.dropbox.com/u/645223/ghello/DL.groovy".toURL().text);java.awt.Desktop.desktop.open(new File('HelloWorld.wav'))//#ghello

この反則技の応用。



DL.groovyの中身

Simple file download from URLのアドレスを固定にしただけで、音声ファイルをダウンロードしてる。

address = 'http://dl.dropbox.com/u/645223/ghello/HelloWorld.wav'
file = new FileOutputStream(address.tokenize("/")[-1]);
out = new BufferedOutputStream(file);
out << new URL(address).openStream();
out.close();


音を鳴らす方法は何パターンかあると思う。

awtを使用する

awtを使用して、OSに設定されてるプレーヤーで再生する方法だ。
iTunesになってると、ライブラリに登録されてしまう(^_^;)

java.awt.Desktop.desktop.open(new File('HelloWorld.wav'))

#ghelloで実行して登録されてしまった人ごめんなさいm(__)m



javax.sound APIを使用する方法

Java SE 1.5 で追加になった javax.sound のAPIを使用する方法
これなら、プレーヤーを使わないので、iTuensに登録されることはない。

import javax.sound.sampled.*
au = AudioSystem.getAudioInputStream(this.class.getResourceAsStream("HelloWorld.wav"))
info = new DataLine.Info(Clip.class, au.getFormat())
line = (Clip) AudioSystem.getLine(info)
line.open(au)
line.start()
line.drain()
line.close()

GroovyのXXXXBuilderってのがある?あったら教えてください。


あと、音声ファイルは、ToSpeak で作成した。
もっとGroovyたんっぽい「声」が作れるよって人はぜひください!!


方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いしまます。


冗談で言ったけど、ホントにできるじゃないだろうか。




添削

Appletを使った場合

java.applet.Applet.newAudioClip('http://dl.dropbox.com/u/645223/ghello/HelloWorld.wav'.toURL()).play()java.applet.Applet.newAudioClip('http://dl.dropbox.com/u/645223/ghello/HelloWorld.wav'.toURL()).play() // #ghello

groovyconsoleは正常に音が鳴る。
groovyshはエラーはでるが、音は鳴る。
だけど、上のコードを保存して、実行すると、
エラーもでないし、うんともすんとも言わない。
なんでだ??

---------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000> java.applet.Applet.newAudioClip('http://dl.dropbox.com/u/645223/ghello/HelloWorld.wav'.toURL()).play()java.applet.Applet.newAudioClip('http://dl.dropbox.com/u/645223/ghello/HelloWorld.wav'.toURL()).play()
ERROR java.lang.NullPointerException:
Cannot get property 'java' on null object
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

んーー、'java' ?? なにが起きてる??