Skip to content

Commit 846f2de

Browse files
committed
some fixes
1 parent deef60b commit 846f2de

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

source/funkin/backend/utils/AudioAnalyzer.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ final class AudioAnalyzer {
471471
// TODO: Wrap it with try until i figured it out an effective way to do this...
472472
// So... sometimes it just uses the decoder even if it looks good?? please help
473473
var n = Math.floor((endPos - startPos) * __toBits);
474-
var i = backend.bufferLengths.length - backend.queuedBuffers - 1, time:Float;
474+
var i = backend.bufferLengths.length - backend.requestBuffers - 1, time:Float;
475475
while (++i < backend.bufferLengths.length) if (startPos >= (time = backend.bufferTimes[i] * 1000)) {
476476
var pos = Math.floor((startPos - time) * __toBits), buf = backend.bufferDatas[i].buffer, size = backend.bufferLengths[i], c = 0;
477477
while (pos >= size) {

source/lime/_internal/backend/native/NativeAudioSource.hx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,9 @@ class NativeAudioSource {
387387
wasEOF = false;
388388
}
389389
}
390-
catch (e:Dynamic) {
391-
trace(e);
392-
result = -1;
390+
catch (e:haxe.Exception) {
391+
trace('NativeAudioSource readToBufferData Bug! error: ${e.message} | ${e.stack}, streamEnded: $streamEnded, total: $total, n: $n');
392+
return result;
393393
}
394394

395395
if (result < 0) {
@@ -444,40 +444,42 @@ class NativeAudioSource {
444444
for (i in (STREAM_MAX_BUFFERS - queuedBuffers)...STREAM_MAX_BUFFERS)
445445
if (sec >= (bufferTime = bufferTimes[i]) && sec < bufferTime + (bufferLengths[i] / wordSize / channels / sampleRate))
446446
{
447+
#if audio_stream_async streamMutex.acquire(); #end
447448
skipBuffers(i - STREAM_MAX_BUFFERS + queuedBuffers);
448-
fillBuffers(STREAM_MIN_BUFFERS - STREAM_MAX_BUFFERS + i);
449449
AL.sourcei(source, AL.SAMPLE_OFFSET, Math.floor((sec - bufferTime) * sampleRate));
450+
fillBuffers(STREAM_MIN_BUFFERS - STREAM_MAX_BUFFERS + i);
451+
#if audio_stream_async streamMutex.release(); #end
450452
return flushBuffers();
451453
}
452454
}
453455

454456
AL.sourceUnqueueBuffers(source, AL.getSourcei(source, AL.BUFFERS_QUEUED));
455457

458+
#if audio_stream_async streamMutex.acquire(); #end
456459
streamEnded = false;
457460
streamSeek(Int64.fromFloat(sec * sampleRate));
458461

459462
requestBuffers = queuedBuffers = streamLoops = nextBuffer = 0;
460463
fillBuffers(STREAM_MIN_BUFFERS);
461464
flushBuffers();
465+
#if audio_stream_async streamMutex.release(); #end
462466
}
463467

464468
#if audio_stream_async
465469
static function streamThreadRun() {
466470
var i:Int, source:NativeAudioSource, process:Int;
467471

468472
while ((i = Thread.readMessage(true)) != 0) {
469-
streamMutex.acquire();
470-
471473
while (i-- > 0) {
472-
if ((source = streamSources[i]).parent.buffer == null || source.parent.buffer.__srcVorbisFile == null) {
474+
if ((source = streamSources[i]).parent.buffer == null) {
473475
source.stopStream();
474476
continue;
475477
}
478+
streamMutex.acquire();
476479
process = source.requestBuffers < STREAM_MIN_BUFFERS ? STREAM_MIN_BUFFERS - source.requestBuffers : 0;
477480
source.fillBuffers(STREAM_PROCESS_BUFFERS > process ? STREAM_PROCESS_BUFFERS : process);
481+
streamMutex.release();
478482
}
479-
480-
streamMutex.release();
481483
}
482484

483485
threadRunning = false;

source/openfl/media/SoundChannel.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ import lime.media.openal.AL;
164164
#if lime_cffi
165165
var backend = __source.__backend, i = 0;
166166
if (backend.streamed) {
167-
size = backend.bufferLengths[i = backend.bufferLengths.length - backend.queuedBuffers];
167+
size = backend.bufferLengths[i = backend.bufferLengths.length - backend.requestBuffers];
168168
buf = backend.bufferDatas[i].buffer;
169169
pos -= Math.floor(backend.bufferTimes[i] * buffer.sampleRate * buffer.channels * wordSize);
170170
while (pos > size) {

0 commit comments

Comments
 (0)