Merge pull request #1541 from Stencyl/fix-native-audio-stream-pos

Fix getCurrentTime for streaming native sounds
This commit is contained in:
player-03
2022-06-10 13:27:00 -04:00
committed by GitHub

View File

@@ -27,6 +27,7 @@ class NativeAudioSource
private static var STREAM_TIMER_FREQUENCY = 100;
private var buffers:Array<ALBuffer>;
private var bufferTimeBlocks:Array<Float>;
private var completed:Bool;
private var dataLength:Int;
private var format:Int;
@@ -103,10 +104,12 @@ class NativeAudioSource
dataLength = Std.int(Int64.toInt(vorbisFile.pcmTotal()) * parent.buffer.channels * (parent.buffer.bitsPerSample / 8));
buffers = new Array();
bufferTimeBlocks = new Array();
for (i in 0...STREAM_NUM_BUFFERS)
{
buffers.push(AL.createBuffer());
bufferTimeBlocks.push(0);
}
handle = AL.createSource();
@@ -214,6 +217,12 @@ class NativeAudioSource
var buffer = new UInt8Array(length);
var read = 0, total = 0, readMax;
for (i in 0...STREAM_NUM_BUFFERS-1)
{
bufferTimeBlocks[i] = bufferTimeBlocks[i + 1];
}
bufferTimeBlocks[STREAM_NUM_BUFFERS-1] = vorbisFile.timeTell();
while (total < length)
{
readMax = 4096;
@@ -364,7 +373,7 @@ class NativeAudioSource
{
if (stream)
{
var time = (Std.int(parent.buffer.__srcVorbisFile.timeTell() * 1000) + Std.int(AL.getSourcef(handle, AL.SEC_OFFSET) * 1000)) - parent.offset;
var time = (Std.int(bufferTimeBlocks[0] * 1000) + Std.int(AL.getSourcef(handle, AL.SEC_OFFSET) * 1000)) - parent.offset;
if (time < 0) return 0;
return time;
}