我正在使用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; }
答案 0 :(得分:2)
使用File
和FileStream
类。 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>