我想知道如何使用通过 fileReference.browse() 方法加载到闪存的 mp3 ?
目前我已经创建了一个 lash 应用程序,它可以将 mp3 文件从本地硬盘驱动器加载到闪存,并提供一个选项来保存加载回硬盘驱动器的 mp3 文件。 但我找不到使用已加载的 mp3 的方法。 我听说 Aviary 中将提供基于 Flash 的编辑器。(http://aviary.com/blog/posts/aviary-acquires-digimix), 所以有一种方法可以在 flash 中使用 mp3,但是如何操作呢?
这是我的代码:
import flash.net.FileReference;
import flash.net.FileFilter;
import flash.utils.ByteArray;
import flash.display.MovieClip;
import flash.net.*;
import flash.events.*;
import flash.media.Sound;
import flash.media.SoundChannel;
var fileReference:FileReference;
var myChannel:SoundChannel;
var mySound:Sound;
var mySprite:Sprite;
var mySprite2:Sprite;
mySound=new Sound();
myChannel=new SoundChannel();
load_btn.addEventListener (MouseEvent.CLICK, onLoadClick);
unload_btn.addEventListener (MouseEvent.CLICK, onUnloadClick);
function onLoadClick ( event:MouseEvent):void
{
fileReference=new FileReference();
var allTypeFilter:FileFilter = new FileFilter("mp3: (*.mp3)","*.mp3");
fileReference.browse([allTypeFilter]);
fileReference.addEventListener(Event.SELECT, selectHandler);
}
function selectHandler(event:Event):void
{
fileReference.removeEventListener(Event.SELECT, selectHandler);
fileReference.addEventListener(Event.COMPLETE, loadCompleteHandler);
fileReference.load();
}
function loadCompleteHandler(event:Event):void
{
fileReference.removeEventListener(Event.COMPLETE, loadCompleteHandler);
var loader:Loader = new Loader();
//loader.contentLoaderInfo.addEventListener(Event.COMPLETE, startPlay);
loader.loadBytes(fileReference.data);
}
function onUnloadClick (event:MouseEvent)
{
trace(fileReference.data);
fileReference.save(fileReference.data, "done.mp3");
}
提前致谢。
最佳答案
事情出奇地复杂。由于某些原因,没有任何 API 可以从 FileReference 或 ByteArray 创建声音对象,因此您必须解析(而不是解码)MP3 并创建可通过 flash.display.Loader.loadBytes 加载的 SWF .
查看blog post有关详细信息和执行此操作的库。加载 Sound 对象后,您可以使用 extract() 方法来获取可在编辑器中使用的 PCM 音频数据。
要从编辑后的PCM生成MP3,看起来有一些Flash mp3 encoders ,但我没用过。
关于flash-cs4 - 如何编辑通过 fileReference.browse() 方法加载到 flash 的 mp3 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178983/