| 包 | flash.media |
| 类 | public final class SoundMixer |
| 继承 | SoundMixer Object |
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
| 属性 | 定义方 | ||
|---|---|---|---|
| bufferTime : int
[static]
在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。
| SoundMixer | ||
![]() | constructor : Object
对类对象或给定对象实例的构造函数的引用。
| Object | |
![]() | prototype : Object
[static]
对类或函数对象的原型对象的引用。
| Object | |
| soundTransform : SoundTransform
[static]
控制全局声音属性的 SoundTransform 对象。
| SoundMixer | ||
| 方法 | 定义方 | ||
|---|---|---|---|
|
[static]
确定是否因安全限制而无法访问任何声音。
| SoundMixer | ||
|
[static]
获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。
| SoundMixer | ||
![]() |
指示对象是否已经定义了指定的属性。
| Object | |
![]() |
指示 Object 类的实例是否在指定为参数的对象的原型链中。
| Object | |
![]() |
指示指定的属性是否存在、是否可枚举。
| Object | |
![]() |
设置循环操作动态属性的可用性。
| Object | |
|
[static]
停止当前正在播放的所有声音。
| SoundMixer | ||
![]() |
返回指定对象的字符串表示形式。
| Object | |
![]() |
返回指定对象的原始值。
| Object | |
| bufferTime | 属性 |
bufferTime:int [read-write]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
在开始传输嵌入的声音流之前,将其预加载到缓冲区中所用的秒数。 除非实现了一个跨域策略文件,否则已加载声音中的数据(包括其缓冲时间)无法被位于其它域的 SWF 文件访问。 有关安全性和声音的详细信息,请参阅 Sound 类说明。
SoundMixer.bufferTime 属性只会影响 SWF 中嵌入声音流的缓冲时间,该属性与动态创建的 Sound 对象(即在 ActionScript 中创建的 Sound 对象)无关。 SoundMixer.bufferTime 的值无法覆盖或设置传递到 Sound.load() 方法的 SoundLoaderContext 对象中指定的缓冲时间默认值。
public static function get bufferTime():int
public function set bufferTime(value:int):void
另请参见
| soundTransform | 属性 |
soundTransform:SoundTransform [read-write]
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
控制全局声音属性的 SoundTransform 对象。 SoundTransform 对象包含用于设置音量、平移、左扬声器指定和右扬声器指定的属性。 SoundTransform 对象只会影响 SWF 文件内嵌入的声音。 在此属性中使用的 SoundTransform 对象提供最终声音设置,这些设置将在应用了任何个别声音设置之后应用于所有声音。
public static function get soundTransform():SoundTransform
public function set soundTransform(value:SoundTransform):void
另请参见
| areSoundsInaccessible | () | 方法 |
public static function areSoundsInaccessible():Boolean
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
确定是否因安全限制而无法访问任何声音。 例如,如果声音的服务器没有跨域策略文件(该文件用于授予对 SWF 文件域的访问权限),则无法访问从 SWF 文件域以外的域中加载的声音。 仍然可以加载和播放声音,但无法对不可访问的声音执行低级操作,如获取声音的 ID3 元数据。
返回Boolean |
另请参见
| computeSpectrum | () | 方法 |
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
获取当前声音波形的快照,并将其放在指定的 ByteArray 对象中。 这些值已设置为标准浮点值(范围为 -1.0 到 1.0)格式。新值覆盖了传递到 outputArray 参数的 ByteArray 对象。 创建的 ByteArray 对象的大小固定为 512 个浮点值,其中前 256 个值表示左声道,后 256 个值表示右声道。
注意:此方法受本地文件安全性限制和跨域加载限制的约束。 如果正在使用本地 SWF 文件或从服务器(该服务器与执行调用的 SWF 在不同的域中)中加载的声音,则可能需要通过跨域策略文件来解决沙箱限制问题。 有关详细信息,请参阅 Sound 类说明。
在 Flash Player Update 3 及更高版本中,通过 RTMP 支持此方法。 在 Flash Media Server 上,可以在服务器端脚本中控制对流的访问。 有关详细信息,请参阅 Server-Side ActionScript Language Reference for Adobe Flash Media Server(《Adobe Flash Media Server 服务器端 ActionScript 语言参考》)中的 Client.audioSampleAccess 和 Client.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 对数据进行采样;依此类推。
|
另请参见
computeSpectrum() 方法生成声音波形数据的图形表示形式。
在构造函数中,加载了一个声音文件,并将其设置为播放。 (此示例中没有任何错误处理代码,并假定该声音文件位于与 SWF 文件相同的目录中。) 该示例在播放声音时侦听 Event.ENTER_FRAME 事件,从而反复触发 onEnterFrame() 方法以绘制声音数据值的图表。 在播放完声音后,onPlaybackComplete() 方法可通过删除 Event.ENTER_FRAME 事件的侦听器以停止绘制过程。
在 onEnterFrame() 方法中,computeSpectrum() 方法在 bytes 字节数组对象中存储原始声音。 数据是按 44.1 KHz 进行采样的。 包含 512 字节数据的字节数组,每个数组包含一个介于 -1 和 1 之间的浮点值。 第一组 256 字节值表示左声道,而第二组 256 字节值表示右声道。 第一个 for 循环读取第一组 256 字节数据值(表示左立体声道),然后使用 Graphics.lineTo() 方法绘制一条从每个点到下一个点的直线。 (声音波形的矢量图形显示内容直接写入到类的 Sprite 对象中。) 声音字节是作为 32 位浮点数从字节流中读取的,并乘以绘制高度以使其位于图表垂直范围内。 宽度被设置为声道长度的两倍。 第二个 for 循环读取下一批 256 字节值(右立体声道),并按相反的顺序绘制直线。 g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); 和 g.lineTo(0, PLOT_HEIGHT); 方法绘制波形的基线。 生成的波形图会产生镜像效果。
package {
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.text.TextField;
public class SoundMixer_computeSpectrumExample extends Sprite {
public function SoundMixer_computeSpectrumExample() {
var snd:Sound = new Sound();
var req:URLRequest = new URLRequest("Song1.mp3");
snd.load(req);
var channel:SoundChannel;
channel = snd.play();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
}
private function onEnterFrame(event:Event):void {
var bytes:ByteArray = new ByteArray();
const PLOT_HEIGHT:int = 200;
const CHANNEL_LENGTH:int = 256;
SoundMixer.computeSpectrum(bytes, false, 0);
var g:Graphics = this.graphics;
g.clear();
g.lineStyle(0, 0x6600CC);
g.beginFill(0x6600CC);
g.moveTo(0, PLOT_HEIGHT);
var n:Number = 0;
for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
n = (bytes.readFloat() * PLOT_HEIGHT);
g.lineTo(i * 2, PLOT_HEIGHT - n);
}
g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
g.endFill();
g.lineStyle(0, 0xCC0066);
g.beginFill(0xCC0066, 0.5);
g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
for (i = CHANNEL_LENGTH; i > 0; i--) {
n = (bytes.readFloat() * PLOT_HEIGHT);
g.lineTo(i * 2, PLOT_HEIGHT - n);
}
g.lineTo(0, PLOT_HEIGHT);
g.endFill();
}
private function onPlaybackComplete(event:Event):void {
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
}
}
| stopAll | () | 方法 |
public static function stopAll():void
| 语言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
停止当前正在播放的所有声音。
此方法不停止播放头。 设置到流的声音在播放头移过它们所在的帧时将恢复播放。
使用此属性时,请考虑 Flash Player 安全模型:
SoundMixer.stopAll() 方法只会停止与调用此方法的对象在相同安全沙箱中的声音。 任何声音回放如果不是从与调用对象相同的沙箱中启动的,则不会停止这样的声音。load() 方法加载声音时,可指定 context 参数,该参数为一个 SoundLoaderContext 对象。 若将 SoundLoaderContext 对象的 checkPolicyFile 属性设为 true,则 Flash Player 将在从其中加载该声音的服务器上检查一个跨域策略文件。 如果服务器具有跨域策略文件,且该文件允许访问 SWF 文件域,则该文件可使用 SoundMixer.stopAll() 方法停止加载的声音;否则就不可以。有关详细信息,请参阅以下部分:
stopAll() 方法将同时播放的两种声音静音。
在构造函数中,加载了两个不同的声音文件,并将其设置为播放。 第一种声音是本地加载的,并将其分配给一个声道。 (假定该文件位于与 SWF 文件相同的目录中。) 第二个文件是从 Adobe 站点加载并流式传输的。 若要使用 SoundMixer.stopAll() 方法,必须能够访问所有声音。 (可以使用 SoundLoaderContext 对象来检查跨域策略文件。) 每种声音还包含一个事件侦听器,如果在加载声音文件时发生 IO 错误,则会调用该事件侦听器。 还创建了一个 muteButton 文本字段。 它侦听鼠标单击,这将调用 muteButtonClickHandler() 方法。
在 muteButtonClickHandler() 方法中,如果文本字段的内容为“MUTE”,areSoundsInaccessible() 方法将检查混音器是否具有文件的访问权限。 如果可以访问文件,stopAll() 方法将停止播放声音。 通过再次单击文本字段,将开始播放第一种声音,并再次将文本字段的内容更改为“MUTE”。 此时,stopAll() 方法将正在播放的那种声音静音。 请注意,也可以使用声道的 stop() 方法停止播放为声道分配的特定声音。 (若要使用声道功能,每次调用 play() 方法时,都需要为声道重新分配声音。)
package {
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.media.Sound;
import flash.media.SoundLoaderContext;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.MouseEvent;
import flash.events.IOErrorEvent;
public class SoundMixer_stopAllExample extends Sprite {
private var firstSound:Sound = new Sound();
private var secondSound:Sound = new Sound();
private var muteButton:TextField = new TextField();
private var channel1:SoundChannel = new SoundChannel();
public function SoundMixer_stopAllExample() {
firstSound.load(new URLRequest("mySound.mp3"));
secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"));
firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler);
secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler);
channel1 = firstSound.play();
secondSound.play();
muteButton.autoSize = TextFieldAutoSize.LEFT;
muteButton.border = true;
muteButton.background = true;
muteButton.text = "MUTE";
muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler);
this.addChild(muteButton);
}
private function muteButtonClickHandler(event:MouseEvent):void {
if(muteButton.text == "MUTE") {
if(SoundMixer.areSoundsInaccessible() == false) {
SoundMixer.stopAll();
muteButton.text = "click to play only one of sound.";
}
else {
muteButton.text = "The sounds are not accessible.";
}
}
else {
firstSound.play();
muteButton.text = "MUTE";
}
}
private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void {
trace(errorEvent.text);
}
private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void {
trace(errorEvent.text);
}
}
}
当前页: http://livedocs.adobe.com/flash/9.0_cn/ActionScriptLangRefV3/flash/media/SoundMixer.html