Flash で音声合成

以前にFlashで音声合成をしたときのメモ。結構お役立ち。(のはず)

Flashアプリにかかわらず、音声を合成したいと言うニーズは結構多いはず。こんなニュースもあるし。

上記で報じている内容はかなり汎用的かつ複雑な開発が必要だろうし、ターゲットもかなり大規模な市場に向けられていると思う。ココではそんな大仰な内容ではなく、もう少し簡単かつ即効性の有るtipsを話したい。

先ず、音声合成の内容とシチュエーションは簡単なもので以下のような感じ。
--------------------------------------------
ユーザーが入力した数値を読み上げる装置
桁数は4桁
言語は日本語
--------------------------------------------
最も簡単な方法は4桁分の音源を全て用意すること。スタジオで9999まで読み上げてもらって、録音する。その後エディターを使って切り出す。さらに音源内容と同様のファイル名を振り分けて、Flashからは入力された数値を確認してファイルを呼び出し、再生する。これで完成。
この方法(仮にシンプルプランとしておく)は音源再生のクオリティを最も高く保つことが出来る。しかし、物理的な限界がいずれ生じる。
現状では4桁だが、それ以上、例えば10桁とかになると音入れが大変な上、切り出しも大変。それからデータの容量もかなりの物になる。特にwebで公開を考えた場合、データの大きさは深刻な懸念材料になる。


従って、やはりここで音声を合成する方法をとる(合成プラン)。合成することによって、データ容量の肥大化と音入れ・切り出しによる時間的な問題を一気にクリアすることが出来る。
ここで録音する音源は以下の通り
--------------------------------------------
1桁:1-9まで
2桁:10,20,30,40,50,60,70,80,90
3桁:100,200,300,400,500,600,700,800,900
4桁:1000,2000,3000,4000,5000,6000,7000,8000,9000
--------------------------------------------
とすると9999個必要だった音源が僅か40個程度で良いことになる。
音源を40個に絞って組み合わせることによって再現する場合、例えば「1234(sen-nihyaku-sanjyu-yon)」を再生したい場合、必要な音源は次の4つ。「1000」「200」「30」「4」だ。
Flashは「1234」を解析して「1000」「200」「30」「4」の4つの音源を選択して順に再生する。
当然のことながら、この場合音源のとぎれが気になる。これから書いていく部分はまさにそこだが、いくら頑張ったところで前述のシンプルプランには後一歩及ばず妥協が必要になることをあらかじめ断っておきたい。また、Flashの解析ロジックはまた次の機会に。

さて、前置きが長くなったが、ここからが本題。
取り上げたいのはここで使用する音源の長さと扱いについてだ。

Flashで音源を扱う場合、やはりmp3を使用することになる。因みに圧縮率は標準的なレベルで問題ない。ただ、音源の長さ(デュレーション)を極限まで切りつめる必要がある。音源の前後に無駄な無音データが残っていると、音源同士の繋がりが悪くなりスムーズに聞こえなくなる。かといって、誤って必要な音源まで切り取ってしまうと当然だが千切れた不自然な再生になる。音源を切り出す際はこの点をかなりシビアにコントロールしなければならない。

しかし、ここでmp3の仕様上の限界に衝突することになる。mp3は圧縮する際のアルゴリズムのために完全に意図した長さ(デュレーション)に調整できない。出典は忘れたが、周波数に依存するため、その倍率でしか音源を作成できないそうだ。端的にいうと60secジャスト、と言う音源は作成不可能であって、60.xxxxsecにならざるを得ないらしい。

こうなると、いくらシビアに切り出しをしたところで意味がないな、と諦めかけたが、FlashのAPIのおかげで解決することが出来た。AS2.0のSoundクラスでは音源再生時に1/1000sec単位でディレイを掛けることが出来る。
スクリプトは次の通り

mySound.start(0.025);

たったこれだけだけど、大幅に改善することが出来る。因みに0.025secというのはこの時経験からなので、ケースバイケースだと思う。また、mp3を切り出すとき、音源の末尾ではなく先頭に無音部分が付加されるように設定する必要が有ることを忘れずに付け加えておく。

Trackback

http://memo.kappa-lab.com/mt-tb.cgi/32

Leave your comment :

(いままで、ここでコメントしたことがないときは、コメントを表示する前に承認が必要になることがあります。そのときはしばらくお待ちください。)




RSS + Contuct

  • rss
  • email

Credit

Copyright (C) 2007 kappa-lab.com.
All Rights Reserved.