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:

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

Static variables

@:value("sampleData")staticinlineread onlySAMPLE_DATA:EventType<SampleDataEvent> = "sampleData"

Defines the value of the type property of a SampleDataEvent event object. This event has the following properties:

PropertyValue
bubblesfalse
cancelablefalse; there is no default behavior to cancel.
positionThe point from which audio data is provided.

Constructor

@:value({ cancelable : false, bubbles : false })new(type:String, bubbles:Bool = false, cancelable:Bool = false)

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

Parameters:

type

The type of the event. This value is:Event.SAMPLE_DATA.

bubbles

Determines whether the Event object participates in the bubbling stage of the event flow.

cancelable

Determines whether the Event object can be canceled.

theposition

The position of the data in the audio stream.

thedata

A byte array of data.

Variables

@:keepdata:ByteArray

The data in the audio stream.

@:keepposition:Float

The position of the data in the audio stream.

Methods

Inherited Variables

Defined by Event

read onlybubbles:Bool

Indicates whether an event is a bubbling event. If the event can bubble, this value is true; otherwise it is false.

When an event occurs, it moves through the three phases of the event flow: the capture phase, which flows from the top of the display list hierarchy to the node just before the target node; the target phase, which comprises the target node; and the bubbling phase, which flows from the node subsequent to the target node back up the display list hierarchy.

Some events, such as the activate and unload events, do not have a bubbling phase. The bubbles property has a value of false for events that do not have a bubbling phase.

read onlycancelable:Bool

Indicates whether the behavior associated with the event can be prevented. If the behavior can be canceled, this value is true; otherwise it is false.

read onlycurrentTarget:Object

The object that is actively processing the Event object with an event listener. For example, if a user clicks an OK button, the current target could be the node containing that button or one of its ancestors that has registered an event listener for that event.

read onlyeventPhase:EventPhase

The current phase in the event flow. This property can contain the following numeric values:

read onlytarget:Object

The event target. This property contains the target node. For example, if a user clicks an OK button, the target node is the display list node containing that button.

read onlytype:String

The type of event. The type is case-sensitive.

Inherited Methods

Defined by Event

@:value({ p5 : null, p4 : null, p3 : null, p2 : null, p1 : null })formatToString(className:String, ?p1:String, ?p2:String, ?p3:String, ?p4:String, ?p5:String):String

A utility function for implementing the toString() method in custom OpenFL Event classes. Overriding the toString() method is recommended, but not required.

class PingEvent extends Event {
	var URL:String;

	public function new() {
		super();
	}

	public override function toString():String {
		return formatToString("PingEvent", "type", "bubbles", "cancelable", "eventPhase", "URL");
	}
}

Parameters:

className

The name of your custom Event class. In the previous example, the className parameter is PingEvent.

Returns:

The name of your custom Event class and the String value of your ...arguments parameter.

isDefaultPrevented():Bool

Checks whether the preventDefault() method has been called on the event. If the preventDefault() method has been called, returns true; otherwise, returns false.

Returns:

If preventDefault() has been called, returns true; otherwise, returns false.

preventDefault():Void

Cancels an event's default behavior if that behavior can be canceled. Many events have associated behaviors that are carried out by default. For example, if a user types a character into a text field, the default behavior is that the character is displayed in the text field. Because the TextEvent.TEXT_INPUT event's default behavior can be canceled, you can use the preventDefault() method to prevent the character from appearing. An example of a behavior that is not cancelable is the default behavior associated with the Event.REMOVED event, which is generated whenever Flash Player is about to remove a display object from the display list. The default behavior (removing the element) cannot be canceled, so the preventDefault() method has no effect on this default behavior. You can use the Event.cancelable property to check whether you can prevent the default behavior associated with a particular event. If the value of Event.cancelable is true, then preventDefault() can be used to cancel the event; otherwise, preventDefault() has no effect.

stopImmediatePropagation():Void

Prevents processing of any event listeners in the current node and any subsequent nodes in the event flow. This method takes effect immediately, and it affects event listeners in the current node. In contrast, the stopPropagation() method doesn't take effect until all the event listeners in the current node finish processing.

Note: This method does not cancel the behavior associated with this event; see preventDefault() for that functionality.

stopPropagation():Void

Prevents processing of any event listeners in nodes subsequent to the current node in the event flow. This method does not affect any event listeners in the current node (currentTarget). In contrast, the stopImmediatePropagation() method prevents processing of event listeners in both the current node and subsequent nodes. Additional calls to this method have no effect. This method can be called in any phase of the event flow.

Note: This method does not cancel the behavior associated with this event; see preventDefault() for that functionality.