FLAC − Flash コンバータ Flash の説明
このプログラムは FLAC 形式のオーディオ ファイルを Flash 形式に変換するものです.(略して「ふらふら」)
なぜこんな訳のわからないものを作ったかということについては,説明が必要でしょう.
「遊び部屋 Annex」に「FLAC プレイヤー」おもちゃがあります.「FLAC プレイヤー」では Sound クラスの動的サウンド生成の機能を用いて音を出していますが,音を出す部分について別の方法を試してみたのがきっかけです.その方法とは次のようなものです.
FLAC をデコードして PCM データを取り出したら,まず,それをサウンドとして埋め込んだ Flash ムービーを生成します.次にそのムービーをロードします.すると,ムービーが再生されて,そこに埋め込んだサウンドが再生されます.
少々回りくどい方法ですが,動的サウンド生成機能に比べて以下のようなメリットがあります.
Flash プレイヤー 9 でも使用可能
動的サウンド生成機能は Flash プレイヤー 10 からしか使えませんが,この方法は Flash プレイヤー 9 でも使えます.
もっとも,「FLAC プレイヤー」では動的サウンド生成の他にも Flash プレイヤー 10 でしか使えない機能を使っているところがあるので,単に「FLAC プレイヤー」の音を出す処理の部分をこの機能に置き換えただけでは,Flash プレイヤー 9 で動作するようにはなりませんが...
サンプリング レートの種類が多い
動的サウンド生成機能ではサンプリング レート 44100 Hz しか使えませんが,この方法では 5512 Hz/11025 Hz/22050 Hz/44100 Hz が使えます.
とりあえず「FLAC プレイヤー」の音を出す部分をこの機能に置き換えたものを作ってみたところ,再生はうまくできましたが,ひとつ問題がありました.再生ボタンをクリックしてから実際に再生が始まるまでの時間が長いのです.
動的サウンド生成機能では,サウンドを生成しながら再生するので,FLAC をデコードしながら順次再生できるのですが,この方法を使う場合は,最初に FLAC を全部デコードしてムービーを生成してから再生を始めることになります.そのため,FLAC のデコードがすべて完了するまで再生を行えません.
サウンド データ全体をひとつのムービーにするのではなく,小さいブロックに分割してムービーを生成し,それを順次再生することはできるかも知れませんが,その場合ブロックのつなぎ目がきれいにつながらないのではないかと思います.試してはいませんが,ブロックとブロックの間で少し間が空いたり,ノイズが入ったりしそうな気がします.
そこで,プレイヤーという形はやめて,FLAC を Flash に変換するコンバータという形にしてみました.変換時には少し時間が掛かりますが,変換した Flash を保存しておけば,ブラウザや Flash 対応プレイヤーで聴くことができます.
「そんな面倒なことをしなくても,FLAC 対応プレイヤーで聴けばいいじゃないか」と言われそうですが,それは「FLAC プレイヤー」おもちゃについても同じことで,あくまでもこれは「お遊び」であるとご理解ください.
このプログラムの使い方は次のようになります.
まず「開く」をクリックして FLAC ファイルを選択します.次に「デコード」をクリックして FLAC をデコードします.デコードが完了したら,再生ボタンをクリックして再生するか,「非圧縮 SWF 保存」,「圧縮 SWF 保存」,「FLV 保存」の何れかをクリックして,該当する形式に変換したファイルを保存します.
「非圧縮 SWF 保存」,「圧縮 SWF 保存」,「FLV 保存」で保存されるファイルは以下のようなものです.
非圧縮 SWF 保存
圧縮していない SWF 形式(署名が“FWS”)のファイルを作成します.
圧縮 SWF 保存
圧縮した SWF 形式(署名が“CWS”)のファイルを作成します.
SWF ファイルにオーディオを格納する形式は圧縮しない生の PCM 形式ですが,SWF ファイル全体が圧縮されます.見方によれば,これは一種の可逆圧縮オーディオ フォーマットと言えます.と言っても,FLAC などのオーディオ専用の可逆圧縮フォーマットと比べると圧縮率は高くはありませんが.
FLV 保存
FLV 形式のビデオ ファイルを作成します.
ビデオ ファイルと言いながらビデオは入っていなくて,オーディオ トラックのみのファイルです.
いくつかの FLV 対応プレイヤーで,このプログラムで作成したファイルの再生を試してみたところ,再生できないプレイヤーがありました.このプログラムではオーディオを生の PCM 形式で格納していますが,再生できなかったプレイヤーはその形式には対応していないようでした.