58 lines
1.4 KiB
Haxe
58 lines
1.4 KiB
Haxe
|
package kha.audio2;
|
||
|
|
||
|
import kha.Sound;
|
||
|
import kha.internal.IntBox;
|
||
|
|
||
|
class Audio {
|
||
|
public static var disableGcInteractions = false;
|
||
|
static var intBox: IntBox = new IntBox(0);
|
||
|
static var buffer: Buffer;
|
||
|
|
||
|
public static function _init() {
|
||
|
var bufferSize = 1024 * 2;
|
||
|
buffer = new Buffer(bufferSize * 4, 2, 44100);
|
||
|
Audio.samplesPerSecond = 44100;
|
||
|
}
|
||
|
|
||
|
public static function _callCallback(samples: Int): Void {
|
||
|
if (buffer == null)
|
||
|
return;
|
||
|
if (audioCallback != null) {
|
||
|
intBox.value = samples;
|
||
|
audioCallback(intBox, buffer);
|
||
|
}
|
||
|
else {
|
||
|
for (i in 0...samples) {
|
||
|
buffer.data.set(buffer.writeLocation, 0);
|
||
|
buffer.writeLocation += 1;
|
||
|
if (buffer.writeLocation >= buffer.size) {
|
||
|
buffer.writeLocation = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function _readSample(): Float {
|
||
|
if (buffer == null)
|
||
|
return 0;
|
||
|
var value = buffer.data.get(buffer.readLocation);
|
||
|
buffer.readLocation += 1;
|
||
|
if (buffer.readLocation >= buffer.size) {
|
||
|
buffer.readLocation = 0;
|
||
|
}
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
public static var samplesPerSecond: Int;
|
||
|
|
||
|
public static var audioCallback: IntBox->Buffer->Void;
|
||
|
|
||
|
public static function play(sound: Sound, loop: Bool = false): kha.audio1.AudioChannel {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static function stream(sound: Sound, loop: Bool = false): kha.audio1.AudioChannel {
|
||
|
return null;
|
||
|
}
|
||
|
}
|