window.runtime 属性window.runtime.flash.media.SoundMixer
继承SoundMixer Inheritance Object
运行时版本:  1.0

SoundMixer 类包含用于在应用程序中进行全局声音控制的静态属性和方法。SoundMixer 类在应用程序中控制嵌入的声音流。它不控制动态创建的声音(即响应调度 sampleData 事件的 Sound 对象而生成的声音)。



属性
 属性定义方
  bufferTime : int
[静态] 在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。
SoundMixer
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  soundTransform : SoundTransform
[静态] 控制全局声音属性的 SoundTransform 对象。
SoundMixer
公共方法
 方法定义方
  
[静态] 确定是否因安全限制而无法访问任何声音。
SoundMixer
  
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[静态] 获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。
SoundMixer
 Inherited
hasOwnProperty(name:String):Boolean
指示对象是否已经定义了指定的属性。
Object
 Inherited
isPrototypeOf(theClass:Object):Boolean
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
propertyIsEnumerable(name:String):Boolean
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
设置循环操作动态属性的可用性。
Object
  
stopAll():void
[静态] 停止当前正在播放的所有声音。
SoundMixer
 Inherited
toString():String
返回指定对象的字符串表示形式。
Object
 Inherited
valueOf():Object
返回指定对象的原始值。
Object
属性详细信息
bufferTime属性
bufferTime:int
运行时版本:  1.0

在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。除非实现了一个跨域策略文件,否则已加载声音中的数据(包括其缓冲时间)无法被位于其它域的 SWF 文件访问。有关安全性和声音的详细信息,请参阅 Sound 类说明。to stream.

SoundMixer.bufferTime 属性只会影响 SWF 中嵌入声音流的缓冲时间,该属性与动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)无关。SoundMixer.bufferTime 的值无法覆盖或设置传递到 Sound.load() 方法的 SoundLoaderContext 对象中指定的缓冲时间默认值。

另请参见

soundTransform属性 
soundTransform:SoundTransform
运行时版本:  1.0

控制全局声音属性的 SoundTransform 对象。SoundTransform 对象包含用于设置音量、平移、左扬声器指定和右扬声器指定的属性。在此属性中使用的 SoundTransform 对象提供最终声音设置,这些设置将在应用了任何个别声音设置之后应用于所有声音。

另请参见

方法详细信息
areSoundsInaccessible()方法
function areSoundsInaccessible():Boolean
运行时版本:  1.0

确定是否因安全限制而无法访问任何声音。例如,如果声音所在的服务器没有用于授予对所在域的访问权限的 URL 策略文件,则无法访问从调用此方法的内容所在域之外的其它域加载的声音。仍然可以加载和播放声音,但无法对不可访问的声音执行低级操作,如获取声音的 ID3 元数据。

对于应用程序安全沙箱中的 AIR 应用程序内容,调用此方法始终返回 false。应用程序安全沙箱中的内容可以访问所有声音(包括从其他域加载的声音)。

返回
Boolean — 布尔值的字符串表示形式。

另请参见

computeSpectrum()方法 
function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
运行时版本:  1.0

获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。这些值已设置为标准浮点值(范围为 -1.0 到 1.0)格式。新值覆盖了传递到 outputArray 参数的 ByteArray 对象。创建的 ByteArray 对象的大小固定为 512 个浮点值,其中前 256 个值表示左声道,后 256 个值表示右声道。

注意:此方法受本地文件安全性限制和跨域加载限制的约束。如果正在使用本地文件或从服务器(该服务器与执行调用的内容在不同的域中)中加载的声音,则可能需要通过跨域策略文件来解决沙箱限制问题。有关详细信息,请参阅 Sound 类说明。此外,此方法无法用于从 RTMP 流中提取数据,即使与 RTMP 服务器位于相同域中的内容调用此方法时也是如此。

在 Flash Player 9.0.115.0 及更高版本和 Adobe AIR 中,通过 RTMP 支持此方法。在 Flash Media Server 上,可以在服务器端脚本中控制对流的访问。有关详细信息,请参阅 Server-Side ActionScript Language Reference for Adobe Flash Media Server(《Adobe Flash Media Server 服务器端 ActionScript 语言参考》)中的 Client.audioSampleAccessClient.videoSampleAccess 属性。

参数

outputArray:ByteArray — 用于保存与声音关联的值的 ByteArray 对象。如果由于安全性限制 (areSoundsInaccessible == true) 而导致任何声音不可用,则 outputArray 对象将保持不变。如果停止了所有声音,则用零填充 outputArray 对象。
 
FFTMode:Boolean (default = false) — 一个用于指示是否首先对声音数据执行 Fourier 转换的布尔值。将此参数设置为 true 会导致方法返回的是频谱而不是原始声音波形。在频谱中,左侧表示的是低频,右侧表示的是高频。
 
stretchFactor:int (default = 0) — 声音采样的分辨率。如果将 stretchFactor 值设置为 0,则会按 44.1 KHz 对数据进行采样;如果值为 1,则按 22.05 KHz 对数据进行采样;如果值为 2,则按 11.025 KHz 对数据进行采样;依此类推。

另请参见


示例

以下示例使用 SoundMixer.computeSpectrum() 方法来显示定期绘制动画的声音波形图。

此示例首先加载并播放声音文件,然后使用 setInterval() 函数监视 SoundMixer.computeSpectrum() 方法,该方法将声音波形数据存储在 bytes ByteArray 对象中。

声音波形是通过设置表示条形图的 div 元素的宽度进行绘制的。

注意:要测试此示例,请执行以下操作:

  1. 将 AIRAliases.js 文件添加到项目目录。
  2. 将一个名为 test.mp3 的 MP3 文件放在同一项目目录中。
  3. 为该项目创建应用程序描述符文件,并使用 ADL 测试该项目。
 <html> 
   <title>Sound Spectrum</title> 
   <script src="AIRAliases.js" /> 
   <script> 
     const PLOT_WIDTH = 600; 
     const CHANNEL_LENGTH = 256; 
      
     var snd = new air.Sound(); 
     var req = new air.URLRequest("test.mp3"); 
     var bytes = new air.ByteArray(); 
     var divStyles = new Array;   
      
     function init() 
     { 
       var div; 
       for (i = 0; i < CHANNEL_LENGTH; i++) 
       { 
         div = document.createElement("div"); 
         div.style.height = "1px";  
         div.style.width = "0px";  
         div.style.backgroundColor = "blue"; 
         document.body.appendChild(div); 
         divStyles[i] = div.style; 
       } 
       playSound(); 
     } 

     function playSound()  
     { 
       if (snd.url != null) 
       { 
         snd.close(); 
       } 
       snd.load(req);     
       var channel = snd.play(); 
       timer = setInterval(setMeter, 100); 
       snd.addEventListener(air.Event.SOUND_COMPLETE, onPlaybackComplete); 
     } 
      
     function setMeter() 
     { 
       air.SoundMixer.computeSpectrum(bytes, false, 0);     
       var n;       
       for (var i = 0; i < CHANNEL_LENGTH; i++)  
       { 
         bytes.position = i * 4; 
         n = Math.abs(bytes.readFloat()); 
         bytes.position = 256*4 + i * 4; 
         n += Math.abs(bytes.readFloat()); 
         divStyles[i].width = n * PLOT_WIDTH; 
       } 
     } 

     function onPlaybackComplete(event) 
     { 
       clearInterval(interval); 
     } 
   </script> 
   <body onload="init()"> 
   </body> 
 </html>
stopAll()方法 
function stopAll():void
运行时版本:  1.0

停止当前正在播放的所有声音。


示例

在下面的示例中,使用 stopAll() 方法将同时播放的两种声音静音。

在构造函数中,加载了两个不同的声音文件,并将其设置为播放。将每种声音分配给一个声道。每种声音还包含一个事件侦听器,如果在加载声音文件时发生 I/O 错误,则会调用该事件侦听器。

muteButtonClickHandler() 方法中,如果文本字段的内容为“Mute”,stopAll() 方法将停止声音。通过再次单击按钮,将开始播放第一种声音,并再次将按钮标签更改为“Mute”。

注意:要测试此示例,请执行以下操作:

  1. 将 AIRAliases.js 文件添加到项目目录。
  2. 将名为 test1.mp3 和 test2.mp3 的 MP3 文件放在同一项目目录中。
  3. 为该项目创建应用程序描述符文件,并使用 ADL 测试该项目。
<html>
  <head>
    <script src="AIRAliases.js" />
    <script>
      var firstSound = new air.Sound();
      var secondSound = new air.Sound();
      var muteButton;
      function init() 
      {
        firstSound.load(new air.URLRequest("test1.mp3"));
        secondSound.load(new air.URLRequest("test2.mp3"));
        
        firstSound.addEventListener(air.IOErrorEvent.IO_ERROR, soundErrorHandler);
        secondSound.addEventListener(air.IOErrorEvent.IO_ERROR, soundErrorHandler);
        
        firstSound.play();
        secondSound.play();
      
        muteButton = document.getElementById("muteButton");         
      }

      function muteButtonClickHandler() 
      {
        if(muteButton.value == "Mute") 
        {        
  
          air.SoundMixer.stopAll();
          muteButton.value = "Play";
        }
        else 
        {
          firstSound.play();        
          secondSound.play();        
          muteButton.value = "Mute";
        }
      } 

      function soundErrorHandler(errorEvent) 
      {
        air.trace(errorEvent.text);
      }
    </script>
  </head>
  <body onload='init()'>
    <input id="muteButton" type="button" value="Mute" onclick="muteButtonClickHandler()" />
  </body>
</html>