1
package org.xiph.system;
3
//import org.xiph.system.Bytes;
7
import flash.media.Sound;
8
import flash.media.SoundChannel;
9
import flash.events.SampleDataEvent;
14
public var available : Int;
21
var sch : SoundChannel;
23
public function new(chunk_size : Int, fill = true, trigger = 0) {
26
this.trigger = trigger;
27
if (this.trigger == -1)
37
public function play() : Void {
38
trace("adding callback");
39
s.addEventListener("sampleData", _data_cb);
45
public function stop() : Void {
51
function _data_cb(event : SampleDataEvent) : Void {
53
var to_write : Int = available > size ? size : available;
54
var missing = to_write < size ? size - to_write : 0;
55
var bytes : Int = to_write * 8;
57
event.data.writeBytes(buffer, 0, bytes);
58
available -= to_write;
59
System.bytescopy(buffer, bytes, buffer, 0, available * 8);
62
if (missing > 0 && missing != size && fill) {
63
trace("samples data underrun: " + missing);
66
event.data.writeFloat(0.0);
67
event.data.writeFloat(0.0);
71
} else if (missing > 0) {
72
trace("not enough data, stopping");
77
public function write(pcm : Array<Vector<Float>>, index : Vector<Int>,
78
samples : Int) : Void {
81
buffer.position = available * 8; // 2 ch * 4 bytes per sample (float)
82
if (pcm.length == 1) {
93
} else if (pcm.length == 2) {
101
buffer.writeFloat(c1[i]);
102
buffer.writeFloat(c2[i2++]);
106
throw "-EWRONGNUMCHANNELS";
109
available += samples;
110
if (!triggered && trigger > 0 && available > trigger) {