包 | flash.events |
类 | public class SampleDataEvent |
继承 | SampleDataEvent Event Object |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
此事件用途有二:
- 为 Sound 对象提供动态生成的音频数据
- 获得 Microphone 对象的音频数据
使用 Sound 对象动态生成音频使用 sampleData
事件播放动态生成的音频。在此环境中,Sound 对象实际上并不包含声音数据。相反,它将用作声音数据的套接字,声音数据通过使用您作为处理函数分配给 sampleData
事件的函数流入它。
在您的函数中,使用 ByteArray.writeFloat()
方法写入到事件的 data
) 属性,此属性包含要播放的取样数据。
如果 Sound 对象尚未加载 MP3 文件,当您调用其 play()
方法时,此对象将开始调度 sampleData
事件,请求声音样本。在播放声音时,Sound 对象将继续发送事件,直至您停止提供数据或调用 SoundChannel 对象的 stop()
方法。
事件的滞后时间因平台而异,在将来版本的 Flash Player 或 AIR 中也可能改变。请不要依赖某个特定的滞后时间。而应使用 ((SampleDataEvent.position/44.1) - SoundChannelObject.position)
进行计算。
提供给 SampleDataEvent 对象的 data
属性的样本的数目在 2048 到 8192 之间。为了获得最佳性能,请尽可能多地提供样本。提供的样本越少,在播放过程中就越有可能出现单击和弹出事件。此行为在不同的平台上会有所不同,并且会在各种情况下发生。例如,当调整浏览器的大小时。在仅提供 2048 个样本时,您可能会编写可在一个平台上运行的代码,但在不同的平台上运行时,同样的代码可能无法正常工作。要尽可能缩短滞后时间,请考虑允许用户选择数据量。
如果提供的样本数少于 2048 个,则 Sound 对象将播放其余的样本,然后停止声音,就像到达了声音文件的末尾,并生成 complete
事件。
可以使用 Sound 对象的 extract()
方法提取其声音数据,然后将声音数据写入动态流以进行播放。
将 sampleData
事件与 Sound 对象一起使用时,仅启用 extract()
和 play()
Sound 方法。调用任何其他方法或属性将导致“调用无效”异常。仍启用 SoundChannel 对象的所有方法和属性。
捕获麦克风音频使用 sampleData
事件从麦克风捕获音频数据。为 sampleData
事件添加事件侦听器时,由于音频样本可用,麦克风将调度此事件。
在事件处理函数中,使用 ByteArray.readFloat()
方法读取事件的 data
) 属性,此属性包含取样数据。此事件将包含多个样本,因此应使用 while
循环读取可用的数据:
var soundBytes:ByteArray = new ByteArray(); while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); }
相关 API 元素
属性 | 由以下参数定义 | ||
---|---|---|---|
bubbles : Boolean [只读]
表示事件是否为冒泡事件。 | Event | ||
cancelable : Boolean [只读]
表示是否可以阻止与事件相关联的行为。 | Event | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
currentTarget : Object [只读]
当前正在使用某个事件侦听器处理 Event 对象的对象。 | Event | ||
data : ByteArray
音频流中的数据。 | SampleDataEvent | ||
eventPhase : uint [只读]
事件流中的当前阶段。 | Event | ||
position : Number
数据在音频流中的位置。 | SampleDataEvent | ||
target : Object [只读]
事件目标。 | Event | ||
type : String [只读]
事件的类型。 | Event |
方法 | 由以下参数定义 | ||
---|---|---|---|
SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null)
创建事件对象以包含有关音频数据事件的信息。 | SampleDataEvent | ||
[覆盖]
创建 SampleDataEvent 对象的副本,并设置每个属性的值以匹配原始对象的属性值。 | SampleDataEvent | ||
用于在自定义 ActionScript 3.0 Event 类中实现 toString() 方法的实用程序函数。 | Event | ||
表示对象是否已经定义了指定的属性。 | Object | ||
检查是否已对事件调用 preventDefault() 方法。 | Event | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
如果可以取消事件的默认行为,则取消该行为。 | Event | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
防止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。 | Event | ||
防止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。 | Event | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
[覆盖]
返回一个字符串,其中包含 SampleDataEvent 对象的所有属性。 | SampleDataEvent | ||
返回指定对象的原始值。 | Object |
常量 | 由以下参数定义 | ||
---|---|---|---|
SAMPLE_DATA : String = "sampleData" [静态]
定义 SampleDataEvent 事件对象的 type 属性值。 | SampleDataEvent |
data | 属性 |
position | 属性 |
SampleDataEvent | () | 构造函数 |
public function SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null)
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
创建事件对象以包含有关音频数据事件的信息。将 Event 对象作为参数传递给事件侦听器。
参数type:String — 事件的类型。此值为 Event.SAMPLE_DATA 。
| |
bubbles:Boolean (default = false ) — 确定 Event 对象是否参与事件流的冒泡阶段。
| |
cancelable:Boolean (default = false ) — 确定是否可以取消 Event 对象。
| |
theposition:Number (default = 0 ) — 数据在音频流中的位置。
| |
thedata:ByteArray (default = null ) — 数据的字节数组。
|
clone | () | 方法 |
toString | () | 方法 |
SAMPLE_DATA | 常量 |
public static const SAMPLE_DATA:String = "sampleData"
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
定义 SampleDataEvent
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
position | 从中提供音频数据的点。 |
相关 API 元素
var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play();
Tue Jun 12 2018, 11:04 AM Z