我试图从URL中获取“.ogg”文件并在我的Flex程序中播放它。Adobe Flex使用Ogg Vorbis编码器将“.ogg”文件转换为与Sound类一起播放
我就使用“.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 library来实现一个解决方案。
的代码,因为我有它现在实现:
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);
} */
在加载的温控功能(),无论是与两个编码:
- _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
所以,任何提示?其他可能的解决方案?
UPDATE
最后,我选择了另一种解决方案。 我拒绝将ogg音频转换为mp3。 取而代之的是,现在ogg audios在服务器中,我只需要通过我的MainApp.html文件中的音频html标签来播放它们的URL。更简单,更高效。
与论坛网站不同,我们不使用“谢谢”或“任何帮助表示赞赏”,或在[so]上签名。请参阅“[应该'嗨','谢谢''标语和祝福从帖子中删除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)。顺便说一句,它是“提前致谢”,而不是“先进感谢”。 –
@JohnSaunders相关知识 – daniegarcia254
'_oggManager'的定义在哪里?它看起来像'loaded'函数中的null。 – Brian