URL から「.ogg」ファイルを取得して、Flex プログラムで再生しようとしています。
「.mp3」ファイルでテストを行いましたが、次のコードですべて正常に動作します。
public function getFileRemote(url:String, id:String):void{
var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, onSoundLoaded);
var req:URLRequest = new URLRequest(url);
s.load(req);
}
private function onSoundLoaded(event:Event):void
{
var localSound:Sound = event.target as Sound;
localSound.play();
}
ただし、「.ogg」形式のファイルでは機能しません。そこで、考えられる解決策をいくつか確認しましたが、 Ogg Vorbis Encoder ライブラリを使用して実装しようとしています。
私が今実装しているコード:
public function getFileRemote(url:String, id:String):void
{
urlStream = new URLStream();
var urlReq:URLRequest = new URLRequest(url);
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load (urlReq);
}
private function handleSoundData(e:SampleDataEvent):void
{//handleSoundData
var result:Object;
var tmpBuffer:ByteArray = new ByteArray();
result = _oggManager.getSampleData(NUM_SAMPLES, tmpBuffer);
if (tmpBuffer.length < NUM_SAMPLES * BYTES_PER_SAMPLE)
{//reset
trace("Reset");
//Right now the only way to rewind is reseting the decoder
_oggManager.initDecoder(_oggBytes);
result = _oggManager.getSampleData( NUM_SAMPLES, tmpBuffer);
}//reset
tmpBuffer.position = 0;
while (tmpBuffer.bytesAvailable)
{//feed
//feed data
e.data.writeFloat(tmpBuffer.readFloat()); //Left Channel
e.data.writeFloat(tmpBuffer.readFloat()); //Right Channel
}//feed
}//handleSoundData
private function loaded(event:Event):void
{
urlStream.readBytes(_oggBytes, 0, urlStream.bytesAvailable);
//urlStream.readBytes(_oggBytes);
_oggManager.decode(_oggBytes);
//_oggManager.initDecoder(_oggBytes);
//Make sound
_sound = new Sound();
_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, handleSoundData, false, 0, true);
_soundChannel = _sound.play();
//trace(urlLoader.data);
} */
関数loaded()で、両方のエンコーディングを使用:
- _oggManager.decode(_oggBytes);
- _oggManager.initDecoder(_oggBytes);
次のエラーが表示されます。
Main Thread (Suspended: TypeError: Error #1009: Cannot access a property or method of a null object reference.)
es.maubic.oxford.portal.views.sessions::ListAudiosView/loaded
それで、何かヒントはありますか?他の可能な解決策はありますか?
アップデート
最後に、別のソリューションを選択しました。ogg オーディオの mp3 への変換を拒否しました。その代わりに、ogg オーディオはサーバーにあり、MainApp.html ファイルのオーディオ HTML タグを介して再生するための URL だけが必要です。よりシンプルで効率的。