http://helpx.adobe.com/jp/flash/using/using-sounds-flash.html を読むと興味深い記述があった。
Flash Professional に読み込むことのできるサウンドファイル形式は、次のとおりです。
Adobe Sound(*.asnd)。Adobe® Soundbooth™ のネイティブサウンド形式です。 Wave(.wav) AIFF(.aif、.aifc) mp3
その他にも、以下のサウンドファイル形式を読み込むこともできます。 Sound Designer® II(.sd2) Sun AU(.au、.snd) FLAC(.flac) Ogg Vorbis(.ogg、.oga)
これはホントなのか。 oggも再生可能か試してみた。
外部mp3,wav,oggをストリーミング再生してみる
http://snipplr.com/view/31915/as3-loading-and-playing-an-external-mp3-file/ のコードを元に、以下をビルド。 swfと同じフォルダーに test.wav, test.mp3, test.oggを配置。
Main.as
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
/**
* ...
* @author foo
*/
public class Main extends Sprite {
private var preloadBottom:Number;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var snd:Sound = new Sound();
var chnl:SoundChannel = new SoundChannel();
snd.load(new URLRequest('test.mp3'));
//snd.load(new URLRequest('test.ogg'));
//snd.load(new URLRequest('test.wav'));
snd.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
function onComplete(e:Event):void {
chnl = snd.play();
}
}
}
}mp3ならストリーミング再生可能。oggとwavは不可。と分かった。
ogg対応なのは、Flash Proでflaファイルにoggを内部埋め込みのときだろう。 ストリーミング(外部ファイル読み込み)だとmp3のみ使えるということだね。
実際は内部埋め込みであればmp3で問題ない。外部読み込みのときこそ、mp3以外を使いたいのだ。mp3はライセンス料問題があるからだ。
ライブラリ使用してwavとogg対応?
しかし、外部wavやoggファイルを再生する方法があるという。
外部oggファイルはよく分からず。
http://stackoverflow.com/questions/9165189/flash-as3-ogg-sound-delayed-adobe-alchemy-library http://labs.byhook.com/2011/02/22/ogg-vorbis-encoder-decoder-for-flash/ を見るとできるようだが、後者から実際にDLしてサンプルswfをローカルで動かし、ローカルのoggを再生してみたら、2m00s(2分0秒)のoggファイル(465KB)のデコードに30秒くらいかかるし、音声が2倍速で再生されてる感じ。これは常用は難しい。
as3wavsound で外部wav再生
まあwavだけでも対応してみよう。 こっちは簡単。
http://stackoverflow.com/questions/12538076/playing-successive-wav-sounds-in-as3 を参考に、FlashDevelpのsrcフォルダー以下に、as3wavsound https://code.google.com/p/as3wavsound/ を展開して出てきたsrc以下のフォルダーをcopy。 swfと同じフォルダー(bin)以下に test.wavを配置。 src/Main.asは以下。
Main.as
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import org.as3wavsound.WavSound;
import org.as3wavsound.WavSoundChannel;
/**
* ...
* @author foo
*/
public class Main extends Sprite {
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var ld:URLLoader = new URLLoader();
ld.dataFormat = 'binary'; //この行は必要だった
ld.load(new URLRequest('test.wav'));
ld.addEventListener(Event.COMPLETE, onComplete);
function onComplete(e:Event):void {
var snd:WavSound = new WavSound(e.currentTarget.data as ByteArray);
var chnl:WavSoundChannel = snd.play();
}
}
}
}デコード時間ほぼ無しでいきなり再生。こっちは問題なく使える。
注意すべきはwavファイルのフォーマットで 44100/22050/11025 kHz で、かつ 8/16 bitだけ対応。48000kHzや24bitはムリなのね。モノラルは再生できた。
0 件のコメント:
コメントを投稿