flash.events

# SampleDataEvent - AS3

Package | flash.events
Class | public class SampleDataEvent
Inheritance | SampleDataEvent Event Object

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

Dispatched when a Sound object requests new audio data or when a Microphone object has new audio data to provide.

This event has two uses:

- To provide dynamically generated audio data for a Sound object
- To get audio data for a Microphone object

Dynamically generating audio using the Sound object Use the `sampleData` event to play dynamically generated audio. In this environment, the Sound object doesn't actually contain sound data. Instead, it acts as a socket for sound data that is being streamed to it through the use of the function you assign as the handler for the `sampleData` event.

In your function, you use the `ByteArray.writeFloat()` method to write to the event's `data`) property, which contains the sampled data you want to play.

If a Sound object has not loaded an MP3 file, when you call its `play()` method the object starts dispatching `sampleData` events, requesting sound samples. The Sound object continues to send events as the sound plays back until you stop providing data, or until the `stop()` method of the SoundChannel object is called.

Thes latency of the event varies from platform to platform, and it could change in future versions of Flash Player or AIR. Don't depend on a specific latency. Instead calculate it using `((SampleDataEvent.position/44.1) - SoundChannelObject.position)`.

Provide between 2048 and 8192 samples to the `data` property of the SampleDataEvent object. For best performance, provide as many samples as possible. The fewer samples you provide, the more likely it is that clicks and pops will occur during playback. This behavior can differ on various platforms and can occur in various situations - for example, when resizing the browser. You might write code that works on one platform when you provide only 2048 samples, but that same code might not work as well when run on a different platform. If you require the lowest latency possible, consider making the amount of data user-selectable.

If you provide fewer than 2048 samples, tha Sound object plays the remaining samples and then stops the sound as if the end of a sound file was reached, generating a `complete` event.

You can use the `extract()` method of a Sound object to extract its sound data, which you can then write to the dynamic stream for playback.

When you use the `sampleData` event with a Sound object, the only Sound methods that are enabled are `extract()` and `play()`. Calling any other methods or properties results in an "invalid call" exception. All methods and properties of the SoundChannel object are still enabled.

Capturing Microphone audio Use the `sampleData` event to capture audio data from a microphone. When you add an event listener for the `sampleData` event, the Microphone dispatches the event as audio samples become available.

In the event handler function, use the `ByteArray.readFloat()` method to read the event's `data`) property, which contains the sampled data. The event will contain multiple samples, so you should use a `while` loop to read the available data:

Copy

    var soundBytes:ByteArray = new ByteArray();
     while(event.data.bytesAvailable)
     {
          var sample:Number = event.data.readFloat();
          soundBytes.writeFloat(sample);
     }

View the examples

Learn more

Working with dynamically generated audio

Related API Elements

flash.media.Sound

Public Properties
Hide Inherited Public Properties
Show Inherited Public Properties

| Property | Defined By
--- | --- | ---
|  | bubbles : Boolean [read-only] Indicates whether an event is a bubbling event. | Event
|  | cancelable : Boolean [read-only] Indicates whether the behavior associated with the event can be prevented. | Event
|  | constructor : Object A reference to the class object or constructor function for a given object instance. | Object
|  | currentTarget : Object [read-only] The object that is actively processing the Event object with an event listener. | Event
|  | data : ByteArray The data in the audio stream. | SampleDataEvent
|  | eventPhase : uint [read-only] The current phase in the event flow. | Event
|  | position : Number The position of the data in the audio stream. | SampleDataEvent
|  | target : Object [read-only] The event target. | Event
|  | type : String [read-only] The type of event. | Event

Public Methods
Hide Inherited Public Methods
Show Inherited Public Methods

| Method | Defined By
--- | --- | ---
|  | SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null) Creates an event object that contains information about audio data events. | SampleDataEvent
|  | clone():Event [override] Creates a copy of the SampleDataEvent object and sets each property's value to match that of the original. | SampleDataEvent
|  | formatToString(className:String, ... arguments):String A utility function for implementing the toString() method in custom ActionScript 3.0 Event classes. | Event
|  | hasOwnProperty(name:String):Boolean Indicates whether an object has a specified property defined. | Object
|  | isDefaultPrevented():Boolean Checks whether the preventDefault() method has been called on the event. | Event
|  | isPrototypeOf(theClass:Object):Boolean Indicates whether an instance of the Object class is in the prototype chain of the object specified as the parameter. | Object
|  | preventDefault():void Cancels an event's default behavior if that behavior can be canceled. | Event
|  | propertyIsEnumerable(name:String):Boolean Indicates whether the specified property exists and is enumerable. | Object
|  | setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void Sets the availability of a dynamic property for loop operations. | Object
|  | stopImmediatePropagation():void Prevents processing of any event listeners in the current node and any subsequent nodes in the event flow. | Event
|  | stopPropagation():void Prevents processing of any event listeners in nodes subsequent to the current node in the event flow. | Event
|  | toLocaleString():String Returns the string representation of this object, formatted according to locale-specific conventions. | Object
|  | toString():String [override] Returns a string that contains all the properties of the SampleDataEvent object. | SampleDataEvent
|  | valueOf():Object Returns the primitive value of the specified object. | Object

Public Constants
Hide Inherited Public Constants
Show Inherited Public Constants

| Constant | Defined By
--- | --- | ---
|  | SAMPLE_DATA : String = "sampleData" [static] Defines the value of the type property of a SampleDataEvent event object. | SampleDataEvent

Property Detail

### data

property

`data:ByteArray`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

The data in the audio stream.

Implementation
`public function get data():ByteArray`
`public function set data(value:ByteArray):void`

### position

property

`position:Number`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

The position of the data in the audio stream.

Implementation
`public function get position():Number`
`public function set position(value:Number):void`
Constructor Detail

### SampleDataEvent

()
Constructor

`public function SampleDataEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, theposition:Number = 0, thedata:ByteArray = null)`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

Creates an event object that contains information about audio data events. Event objects are passed as parameters to event listeners.

Parameters

| `type:String` — The type of the event. This value is:`Event.SAMPLE_DATA`.
| `bubbles:Boolean` (default = `false`)`` — Determines whether the Event object participates in the bubbling stage of the event flow.
| `cancelable:Boolean` (default = `false`)`` — Determines whether the Event object can be canceled.
| `theposition:Number` (default = `0`)`` — The position of the data in the audio stream.
| `thedata:ByteArray` (default = `null`)`` — A byte array of data.

Method Detail

### clone

()
method

`override public function clone():Event`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

Creates a copy of the SampleDataEvent object and sets each property's value to match that of the original.

Returns

| `Event` — A new SampleDataEvent object with property values that match those of the original.

### toString

()
method

`override public function toString():String`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

Returns a string that contains all the properties of the SampleDataEvent object. The string is in the following format:

`[SampleDataEvent type=value bubbles=value cancelable=value theposition=value thedata=value]`

Returns

| `String` — A string that contains all the properties of the `SampleDataEvent` object.

Constant Detail

### SAMPLE_DATA

Constant

`public static const SAMPLE_DATA:String = "sampleData"`

Language Version: | ActionScript 3.0

Runtime Versions: | Flash Player 10, AIR 1.5

Defines the value of the `type` property of a `SampleDataEvent` event object.

This event has the following properties:

Property | Value
--- | ---
`bubbles` | `false`
`cancelable` | `false`; there is no default behavior to cancel.
`position` | The point from which audio data is provided.

Related API Elements

flash.media.Sound.sampleData
flash.events.SampleDataEvent
Examples How to use this example
Sound_sampleDataExample.as
The following example plays a simple sine wave.
Copy

    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();

© 2015 Adobe Systems Incorporated. All rights reserved.
Mon Apr 10 2017, 12:28 PM -07:00