热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AS3.0声音处理

一、类的结构查看flash.media包,这个包是用来处理声音、视频、照相机和麦克风的。对于处理声音来说就有6各类。现在分别对他们概括一下。Sound类【Sound

一、类的结构

查看flash.media包,这个包是用来处理声音、视频、照相机和麦克风的。对于处理声音来说就有6各类。现在分别对他们概括一下。

 

Sound类【Sound 类允许您在应用程序中使用声音。 使用 Sound 类可以创建新的 Sound 对象、将外部 MP3 文件加载到该对象并播放该文件、关闭声音流,以及访问有关声音的数据,如有关流中字节数和 ID3 元数据的信息。 可通过以下项对声音执行更精细的控制:声音源(声音的 SoundChannel 或 Microphone 对象)和 SoundTransform 类中用于控制向计算机扬声器输出声音的属性。

Sound类用来加载声音别可播放声音。其载入声音有两个方式:下面是其构造函数

 

public function Sound(stream:URLRequest = null, context:SoundLoaderContext = null)

URLRequest :通过URL请求访问文件  new URLRequest (str:String);

SoundLoaderContext:MP3 数据保留在 Sound 对象的缓冲区中的最小毫秒数。 在开始回放以及在网络中断后继续回放之前,Sound 对象将一直等待直至至少拥有这一数量的数据为止。 默认值为 1000(1 秒)。

 

第一种:通过URL访问网上或者本地mp3文件,下面是访问本地一个名为1.mp3的文件,此文件要求和此项目的fla文件放到一起。

var sound:Sound=new Sound();//默认是不会加载文件的

var url:URLRequest=new URLRequest("1.mp3");

sound.load(url);

sound.play();//播放音乐    返回一个SoundChannel 类实例

 

第二种:通过嵌入到程序中,使用swc文件

打开cs4,文件->导入->库或者舞台。如果说声音文件导入失败,就用千千静听转化一下就可以了。导入成功后,打开库,右键属性

AS3.0声音处理 - 溜盲侠士 - 咦,快看

 设置完后确定。最后就是导出swc文件了,点击发布设置,点击Flash,在“swf设置”中选中“导出swc”复选框。点击确定。

记住,生成的所以文件最后放到同一个文件夹,如果不是有可能失败。

 

SoundChannel类【SoundChannel 类控制应用程序中的声音。 Adobe ? Flash ? 应用程序中播放的每一个声音都被分配到一个声道,而且应用程序可以具有混合在一起的多个声道。 SoundChannel 类包含 stop() 方法、用于监控声道幅度(音量)的属性,以及用于对声道设置 SoundTransform 对象的属性。

例如:var soundChannel:SoundChannel=sound.play();

         soundChannel.stop();//停止声音

在此类中有一个重要是属性,那就是position属性,用来保存当前音乐播放的位置。以毫秒为单位。

 

SoundTransform类【SoundTransform 类包含音量和平移的属性。 以下对象包含 soundTransform 属性,该属性的值是一个 SoundTransform 对象:Microphone、NetStream、SimpleButton、SoundChannel、SoundMixer 和 Sprite。

此类和声音音量有关,可以调节声音。它可以通过SoundChannel的soundTransform属性获得,例如下面的实例:

        var soundChannel:SoundChannel=sound.play();

         var soundTf:SoundTransform =soundChannel.soundTransform;

        soundTf.volume=0.7;//把声音调节为70%音量

 

SoundMixer类【SoundMixer 类包含 SWF 文件中全局声音控件的静态属性和方法。 SoundMixer 类控制 SWF 中嵌入的声音流;它并不控制动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)。

此类非常简单,就是可以控制所有的声音。不可以控制单个声音。包括对声音的音量和关闭所有是声音。

其还有一个重要的操作就是可以计算操作声音的频谱。什么叫频谱其实我也不知道。最重要的就是你学会了就可以做出像windows Media layer

中的声音的可视效果。

 

ID3Info类【

ID3Info 类包含反映 ID3 元数据的属性。 可以通过访问 Sound 类的 id3 属性来获取 MP3 文件的其它元数据;例如,mySound.id3.TIME。 有关详细信息,请在 http://www.id3.org 上参阅 Sound.id3 条目和 ID3 标签定义。

理解其实很简单,就是ma3文件规范,定义一些ID3规范信息。对ID3信息编码,以后根据ID3规范解码就可以播放声音。通过这个类你可以不必知道ID3数据的形式,知道你会使用此类就可以非常简单的访问到ID3文件中描述的例如歌曲名,作者等等。

二,实例代码

下面的代码主要就是实现音乐播放器的基本功能,重放,播放,停止,暂停,快进和快退。

最主要的思想就是如果想调整声音,首先必须要先stop()声音。例如重放,快进和快退,都要事先停止声音。为了可以回到先前播放的位置,可以通过   SoundChannel.postion来得知。

属性值的返回:

SoundChannel=Sound.play();

SoundTransform=SoundChannel.soundTransform

要想知道声音播放的位置,可以通过Sound的play方法返回SoundChannel类来实现,要想可以调节声音大小

可以通过SoundChannel的soundTransform属性来返回SoundTransform类来实现。

 

下面是一个标签,用来显示按钮的标签名字:

package  
{
 import flash.text.TextField;
 
 /**
  * ...
  * @author 戢晶晶
  */
 public class ButtonLabel extends TextField{
  public function ButtonLabel(label:String) {
   this.textColor = 0xffffff;
   text = label;
   this.mouseEnabled = false;
  }
  
 }
 
}

 

下面就是主类,

 

package 
{
 import adobe.utils.ProductManager;
 import flash.accessibility.AccessibilityProperties;
 import flash.display.Sprite;
 import flash.events.*;
 import flash.media.Sound;
 import flash.media.SoundChannel;
 import flash.media.SoundLoaderContext;
 import flash.net.*;
 import flash.errors.*;
 import flash.text.TextField;
 import flash.ui.ContextMenuBuiltInItems;
 import flash.utils.Timer;
 
 
 /**
  * ...
  * @author 戢晶晶
  * 此项目用来创建一个音乐播放器,可以对声音的播放,暂停,快进和快退,重新播放和停止
  */
 public class Main extends Sprite {
  private var soundPosition:int;//用来记录当前音乐的位置,暂停的位置
  private var start:Boolean=true//是否开始播放音乐
  /*
   *   分别是重放,播放,停止,快进和快退,绘制颜色分别是
   *        红色  ,绿色,黑色,蓝色,其他颜色
   */
  private var replaySprite:Sprite, playSprite:Sprite, stopSprite:Sprite, speedSprite:Sprite, recedeSprite:Sprite;
  private const moveSpeed:int=2000;//快进和快退的移动速度
  private var sound:Sound;//音乐类
  
  private var soundC:SoundChannel;//声音的控制
  public function Main():void {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }
  
  private function init(e:Event = null):void {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   // entry point
   replaySprite = new Sprite();
   replaySprite.graphics.beginFill(0xff0000);
   replaySprite.graphics.drawRect(0, 0, 50, 50);
   replaySprite.graphics.endFill();
   addChild(replaySprite);
   replaySprite.addChild(new ButtonLabel("relay"));
   replaySprite.name = "replaySprite";
   
   playSprite = new Sprite();
   playSprite.graphics.beginFill(0x00ff00);
   playSprite.graphics.drawRect(0, 0, 50, 50);
   playSprite.graphics.endFill();
   addChild(playSprite);
   playSprite.x = 60;
   playSprite.addChild(new ButtonLabel("play"));
   playSprite.name = "playSprite";
   
   stopSprite = new Sprite();
   stopSprite.graphics.beginFill(0x0);
   stopSprite.graphics.drawRect(0, 0, 50, 50);
   stopSprite.graphics.endFill();
   addChild(stopSprite);
   stopSprite.x = 120;
   stopSprite.addChild(new ButtonLabel("stop"));
   stopSprite.name = "stopSprite";
   
   speedSprite = new Sprite();
   speedSprite.graphics.beginFill(0x0000ff);
   speedSprite.graphics.drawRect(0, 0, 50, 50);
   speedSprite.graphics.endFill();
   addChild(speedSprite);
   speedSprite.x = 180;
   speedSprite.addChild(new ButtonLabel("march"));
   speedSprite.name = "speedSprite";
   
   recedeSprite = new Sprite();
   recedeSprite.graphics.beginFill(0xff8080);
   recedeSprite.graphics.drawRect(0, 0, 50, 50);
   recedeSprite.graphics.endFill();
   recedeSprite.x = 240;
   addChild(recedeSprite);
   recedeSprite.addChild(new ButtonLabel("recede"));
   recedeSprite.name = "recedeSprite";
   
   //注册主场景的按钮点击监听
   addEventListener(MouseEvent.CLICK,onClick);
  }
  
  private function onClick(e:MouseEvent):void {//鼠标单击事件
   var sp:Sprite = (e.target as Sprite);
   if (sp == playSprite) {//播放音乐
    playSound(soundPosition);
   }else if (sp == stopSprite) {//停止音乐
    stop();
   }else if (sp == replaySprite) {//重放音乐
    replay();
   }else if (sp == speedSprite) {//快进音乐
    march();
   }else if (sp == recedeSprite) {//快退音乐
    recedeS();
   }
  }
  /*
   *   播放音乐
   * sp Nubmer 声音播放的位置
  */
  public function playSound(sp:Number=0):void {
    if (sound==null) {
     sound = new MySound();//创建声音对象
    }
    if(start){
       soundC = sound.play(sp);
       start = false;
    }else {
     if (soundC) {//如果声音控制对象存在
            pause();
         start = true;
         }
    }
    
  }
  
  public function pause():void {//暂停音乐
   if (soundC) {
    soundPosition = soundC.position;//记录暂停的位置
    soundC.stop();//停止音乐
   }
  }
  
  public function stop():void {//暂停声音
   if (soundC) {
    soundPosition = 0;
    start = true;
    soundC.stop();
    soundC = null;
    sound = null;
   }
  }
  
  public function march():void {//快进
   if (soundC) {
    soundPosition += moveSpeed;//快进的步数
    if (soundPosition > sound.length) {//超过
     stop();
     return;
    }
    soundC.stop();
    start = true;
    playSound(soundPosition);
   }
  }
  
  public function recedeS():void {//快退
   if (soundC) {
    soundPosition -= moveSpeed;
    if (soundPosition <= 0) {
     trace("soundPosition="+soundPosition);
     stop();
    }
   }
  }
  
  public function replay():void {
      stop();
      playSound();
  }
 }
 
}


推荐阅读
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
author-avatar
mobiledu2502869223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有