為替レートを定期的に読み上げるサービスが欲しいんだけど見つからなかった。ないものはしかたがないので自作してみる。
node.jsで作るのが個人的に一番楽だろうけど、今後のWEBサービスにつながるかもしれないからHTMLベースで作ってみる。
まずは為替レートの取得
ちょっと調べると外為オンラインのAPIが使えるみたいです。
正式なものではないので個人的かつ小規模な利用にとどめた方がよさそう。
( URL: http://www.gaitameonline.com/rateaj/getrate )
HTMLベースだとCross-Origin Resource Sharing (CORS)の問題があるので、Amazon API Gatewayをかませることで解決します。
次に音声合成と出力
JSONで取得できるレートをそのままwavに変換して出力したい。
ここではspeak.js というものがありました。
数年前のものですがブラウザで音声合成してくれるとんでもないやつです。
使用方法も簡単で、
- speakClient.js, speakGenerator.js, speakWorker.js をHTMLと一緒に置く
- <script src=”speakClient.js”></script>でロードする
- <div id=”audio”></div>を挿入する
- speak(‘Hello World’);
これだけで音声合成+再生されます。
オプションは第2引数で以下のように指定可能。
speak(yomi,{speed:200,wordgap: 2,amplitude:50,pitch:70});
これで定期的に為替レートの更新してしゃべらせればいいんだけど以下の問題があった。
- baseタグで指定していると読み込み失敗したりする
- 内部パスの問題なので3ファイルを1ファイルに詰め込んで回避(こんな感じ)
- 英語だけしか発音できない
- 数字に対応する日本語っぽい発音を返すようにした(100の発音は妥協)
-
1234567891011121314151617function a(n){var r='';switch(n){case 1:r='each';break;case 2:r='nee';break;case 3:r='sun';break;case 4:r='yon';break;case 5:r='go';break;case 6:r='roch';break;case 7:r='naanaa';break;case 8:r='huch';break;case 9:r='cu';break;case 10:r='ju';break;case 100:r='facu';break;}return r;}
聞けなくはないけど少し耳障り。
発想の転換
数字の音読だけなら0~9, 10, 100, .(テン)の発音の組み合わせで再現できる。
それぞれのwavファイルを読み込んで順々に再生すればいけるはず。
1 2 3 4 5 6 7 8 |
var audio100 = new Audio('wav/100.wav'); var audio10 = new Audio('wav/10.wav'); var audioTEN = new Audio('wav/ten.wav'); var audio =[new Audio('wav/0.wav'), new Audio('wav/1.wav'),new Audio('wav/2.wav'),new Audio('wav/3.wav'), new Audio('wav/4.wav'),new Audio('wav/5.wav'),new Audio('wav/6.wav'), new Audio('wav/7.wav'),new Audio('wav/8.wav'),new Audio('wav/9.wav') ]; |
こんな感じでロードだけ先にしておいて、数値順に
xxx.currentTime=0;xxx.play();
を繰り返せばそれっぽく聞こえるようになった。
せっかくだし為替レートの取得部分がどうにかできれば公開したいなー。