gpt4 book ai didi

apache-flex - 使用 Flex 的 mxmlc 编译器在 SWF 中包装或嵌入 MP3

转载 作者:行者123 更新时间:2023-12-02 02:33:34 25 4
gpt4 key购买 nike

我们基于 Flash 网络的应用程序会播放大量音频用于旁白和音效。我们的一些客户有阻止下载 MP3 和其他音频文件的防火墙规则。因此,我们需要将这些 MP3 文件包装在 SWF 中。过去,我编写了 JSFL 脚本来自动化 Flash IDE,并通过一组复杂、脆弱的步骤将 MP3 文件嵌入 FLA,然后将它们发布到 SWF。现在,Flex SDK 提供了 mxmlc 编译器。我已将 ANT 混合到我们的工作流程中,并且命令行和自动化构建一直是一种乐趣。所以,我想将 MP3 的转码或包装作为我们构建过程的一部分。我找到了 Embedding Asset at Compile time in Pure AS3 ,但这将需要我编写一个脚本来生成一个包装类 AS 文件。是否有更简洁的方法将 MP3 文件打包或转码为 SWF?我想我希望有一种方法可以将 mp3 直接传递给 mxmlc 并输出 swf,但是如果有任何比生成 actionscript 包装器类更好的建议,我们将不胜感激。

最佳答案

由于您已经在使用 MXMLC 和 Ant,您应该考虑向 Ant 构建脚本添加另一段代码,以将 MP3 构建到库 SWC 中。然后您可以将该 SWC 构建到可执行 SWF 中(我在下面的示例中省略了这个简单的步骤)。

因为您只需要 Ant,所以这样做并不比您已经构建 SWF 的方式更难。唯一真正的“陷阱”是您需要在代码中使用 MXMLC/SWC 友好的绝对路径嵌入您的文件(例如“/myAssets/myasset.mp3”)。

因为它可以访问项目元数据,所以 Flash Builder“知道”项目的根目录在哪里,从而允许它使用相对嵌入路径。 MXMLC 没有任何此类信息。因此,您需要确保声明的嵌入与文件在 SWC 中的存储方式的绝对位置相匹配。如果这样做,Flash Builder 和 MXMLC/Ant 都将能够理解您的嵌入。这样,每个人都很开心。

为了帮助您,下面是一个用于构建 Assets SWC 的示例 Ant 脚本。以下是关键步骤,简而言之:

  • 建立一个字符串,其中包含要包含的文件的位置,一个一个地
  • 使用 MXMLC 和一组庞大的命令行参数将这些 Assets 编译成 SWC

以下脚本会将jpgs、pngs、svgs、ttfs、xml文件、properties文件和MP3s打包到一个名为“assets.swc”的文件中。您需要在适当的相对位置包含 flexTasks.jar(出于显而易见的原因)和 ant-contrib.jar 并设置 FLEX_HOME 环境变量。

<?xml version="1.0" encoding="utf-8"?>
<project name="My App Builder"
basedir="."
default="buildSWC"
xmlns:antcontrib="antlib:net.sf.antcontrib">
<taskdef resource="flexTasks.tasks" classpath="${basedir}/libs/flexTasks.jar"/>
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/libs/ant-contrib-1.0b3.jar"/>

<property environment="env"/>

<property name="FLEX_HOME" value="${env.FLEX_HOME}"/>
<property name="ASSETS_FILE" value="assets.swc"/>
<property name="SRC_DIR" value="./src"/>

<!-- Prepare folders for SWC compilation -->
<target name="buildSWC">
<echo message=""/>
<echo message="*****************************************************"/>
<echo message="* ${ASSETS_FILE}"/>
<echo message="*****************************************************"/>
<echo message="...basedir: ${basedir}"/>

<!-- Build a swc from statically-included assets (images, mp3s, xml files, properties files) -->
<fileset id="assets.flex" dir="src" includes="**/*.jpg,**/*.png,**/*.mp3,**/*.css,**/*.svg,**/*.swf,**/*.TTF,**/*.jpeg,**/*.xml,**/*.properties"/>
<pathconvert pathsep=" " property="assets.flex.output" refid="assets.flex" dirsep="/">
<map from="${basedir}/src/" to=""/>
</pathconvert>

<echo message="...Resources being considered..."/>
<var name="filelist" value=""/>
<var name="prefixfilelist" value="-include-file"/>
<for list="${assets.flex.output}" delimiter=" " param="asset">
<sequential>
<echo>Asset: @{asset}</echo>
<propertyregex property="prop"
input="${asset}"
regexp="(.*)${SRC_DIR}/(.*)"
select="\2"
casesensitive="false"
defaultvalue="./src/"/>
<echo>Prop: ${prop}</echo>
<var name="filelist_tmp" value="${filelist}"/>
<var name="filelist" unset="true"/>
<var name="filelist"
value="${filelist_tmp} ${prefixfilelist} ./@{asset} ${prop}@{asset}"/>
<var name="prop" unset="true"/>
</sequential>
</for>
<echo message="-output ${ASSETS_FILE} ${filelist}"/>

<!-- Windows Compile -->
<exec executable="${FLEX_HOME}/bin/compc.exe"
failonerror="true"
osfamily="winnt">
<arg line="-output ./libs/assets.swc ${filelist}"/>
</exec>

<!-- Unix/Linux Compile -->
<exec executable="${FLEX_HOME}/bin/compc"
failonerror="true"
osfamily="unix">
<arg line="-output ./libs/assets.swc ${filelist}"/>
</exec>
</target>
</project>

我们使用这种方法(我从互联网上找到的点点滴滴拼凑而成——如果我记得在哪里,我很乐意给予信任)来构建一个大型的、基于模块的项目及其嵌入的图像和字体。没有理由认为它不适用于音频文件。

祝你好运

泰勒

附言那里可能有一些剩余/无用的代码行。另外,我不是 Ant 专家,所以对于那里的任何“Ant 人”:如果我违反了任何最佳实践,请放轻松 ;)

关于apache-flex - 使用 Flex 的 mxmlc 编译器在 SWF 中包装或嵌入 MP3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com