Flash as3 Air将此mp3文件保存到手机/标签sd卡内存中

时间:2014-04-08 14:45:21

标签: android actionscript-3 flash air

我正在使用adobe flash cs5.5 AIR开发一个Android应用程序。我有一个简单的声音按钮播放声音剪辑。我想使用名为save的按钮将此music1.mp3文件保存到手机或标签SD卡内存中。我不知道该怎么做。任何人都可以回答..?

这是我使用的示例脚本:

musicbtn.addEventListener(MouseEvent.CLICK, fl_ClickToPlayStopSound);

var fl_SC:SoundChannel;

var fl_ToPlay:Boolean = true;

function fl_ClickToPlayStopSound(evt:MouseEvent):void

{
if (fl_ToPlay)

{
    var s:Sound = new Sound(new URLRequest("sound/music1.mp3"));
    fl_SC = s.play();
}
else
{
    fl_SC.stop();
}
fl_ToPlay = !fl_ToPlay; }

2 个答案:

答案 0 :(得分:2)

使用FileFileStream类。 File表示系统上的文件或目录,仅在AIR中可用。 FileStream允许您打开与该文件的连接,创建,写入,读取和删除它。

所以这样的事情会起作用。

var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, completeHandler); // not entirely sure this is the correct event, but it should be. I haven't played with the Sound class in a while
s.load(new URLRequest("sound/music1.mp3"));

function completeHandler(e:Event):void {
    var fs:FileStream = new FileStream();
    var f:File = File.applicationStorageDirectory.resolvePath("music1.mp3"); // selects file in the sandboxed dir for your app

    var bytes = new ByteArray();
    s.extract(bytes, 4096); // load file into ByteArray. Unsure length argument is correct, may need tweaking

    fs.open(f, FileMode.WRITE); // opens stream to file, sets mode to WRITE which will create and truncate the file
    fs.writeBytes(bytes); // write ByteArray to file
    fs.close(); // closes link to file. ALWAYS make sure you do this. Failing to do so can have consequences
}

那是未经测试的,所以可能需要一些调整,但这是你如何做到这一点的一般要点。我不完全确定Sound#extract()将MP3数据写入ByteArray。我总是认为AS3在写音频数据时会遇到未压缩的WAV数据,但我可能错了。

您还需要确保此权限位于app.xml的Android Manifest部分。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

一如既往,阅读文档。 Adobe的AS3,AIR和Flex&lt; = 4.6文档是我找到的最好的语言之一。这真的很有帮助。

答案 1 :(得分:0)

您可以通过File类保存到adobe AIR中的andriod sd卡。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html

var soundfile:File = File.applicationStorageDirectory.resolvePath("music1.mp3");
var fstream:FileStream = new FileStream();
fstream.open(soundfile, FileMode.WRITE);
fstream.writeBytes(ba, 0, ba.length);
fstream.close();

其中ba是包含音乐数据的ByteArray。如果您不确定如何操作,请将其包含在下方。


使用Sound类中的extract函数,我们可以将声音文件提取到byteArray。查看文档链接:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Sound.html#extract()

ByteArray ba;
sound.extract(ba, 4096);

然后你可以使用不同的压缩算法压缩这个byteArray(它可能会节省一些空间,因为你要移动),但是如果你这样做,你必须在你想要播放它们时在你的代码中解压缩它们。 / p>

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html#compress()