Fix AudioAnalyzer
This commit is contained in:
@@ -684,7 +684,7 @@ class FlxSound extends FlxBasic {
|
||||
#end
|
||||
|
||||
_channel.soundTransform = _transform;
|
||||
_channel.__lastPeakSamples = 0;
|
||||
_channel.__lastPeakTime = -10;
|
||||
_channel.__leftPeak = 0;
|
||||
_channel.__rightPeak = 0;
|
||||
_channel.addEventListener(Event.SOUND_COMPLETE, stopped);
|
||||
@@ -772,7 +772,7 @@ class FlxSound extends FlxBasic {
|
||||
@:privateAccess return _sound != null ? _sound.__buffer : null;
|
||||
|
||||
function update_amplitude():Void @:privateAccess {
|
||||
if (_channel == null || !_channel.__updatePeaks() || !_amplitudeUpdate) return;
|
||||
if (_channel == null || !_channel.__updatePeaks(get_time()) || !_amplitudeUpdate) return;
|
||||
|
||||
_amplitudeUpdate = false;
|
||||
_amplitudeLeft = _channel.__leftPeak;
|
||||
|
||||
@@ -48,7 +48,7 @@ class AudioAnalyzer {
|
||||
if (useSeperate) {
|
||||
while (c < outSeperate.length) outSeperate[c++] *= __bitSize;
|
||||
while (c++ < buffer.channels) outSeperate.push(0);
|
||||
c = 0;
|
||||
c = Math.floor((pos % (__wordSize * buffer.channels)) / __wordSize);
|
||||
}
|
||||
if (__wordSize == 1) { // 8-bit audio data is unsigned (0 is 128, 128 is 256, -128 is 0)
|
||||
while (pos < end) {
|
||||
@@ -113,7 +113,7 @@ class AudioAnalyzer {
|
||||
if (useSeperate) {
|
||||
while (c < outSeperate.length) outSeperate[c++] *= __bitSize;
|
||||
while (c++ < buffer.channels) outSeperate.push(0);
|
||||
c = 0;
|
||||
c = Math.floor((pos % (__wordSize * buffer.channels)) / __wordSize);
|
||||
}
|
||||
while (n > 0) {
|
||||
n -= (result = __vorbis.read(__buffer, 0, n < bufferSize ? n : bufferSize, isBigEndian, __wordSize, true));
|
||||
|
||||
@@ -82,7 +82,7 @@ import lime.media.openal.AL;
|
||||
@:noCompletion private var __sound:Sound;
|
||||
@:noCompletion private var __isValid:Bool;
|
||||
@:noCompletion private var __soundTransform:SoundTransform;
|
||||
@:noCompletion private var __lastPeakSamples:Float;
|
||||
@:noCompletion private var __lastPeakTime:Float;
|
||||
@:noCompletion private var __leftPeak:Float;
|
||||
@:noCompletion private var __rightPeak:Float;
|
||||
#if lime
|
||||
@@ -151,32 +151,32 @@ import lime.media.openal.AL;
|
||||
this.soundTransform = soundTransform;
|
||||
}
|
||||
|
||||
@:noCompletion private function __updatePeaks():Bool
|
||||
@:noCompletion private function __updatePeaks(time:Float):Bool
|
||||
{
|
||||
var backend = __source.__backend;
|
||||
var samples = AL.getSourcef(backend.handle, AL.SAMPLE_OFFSET);
|
||||
if (__lastPeakSamples == samples) return false;
|
||||
if (Math.abs(time - __lastPeakTime) < 8) return false;
|
||||
|
||||
__lastPeakSamples = samples;
|
||||
__lastPeakTime = time;
|
||||
__leftPeak = __rightPeak = 0;
|
||||
#if (lime_cffi && !macro)
|
||||
if (!__isValid) return false;
|
||||
|
||||
var buffer = __source.buffer;
|
||||
var backend = __source.__backend, buffer = __source.buffer;
|
||||
var wordSize = buffer.bitsPerSample >> 3, bitUnsignedSize = 1 << buffer.bitsPerSample, bitSize = 1 << (buffer.bitsPerSample - 1);
|
||||
var pos = Math.floor(samples * buffer.channels * wordSize), size = 0, i = 0, buf;
|
||||
pos -= pos % wordSize;
|
||||
var pos = Math.floor(time * buffer.sampleRate / 1000 * buffer.channels * wordSize), size = 0, i = 0, buf;
|
||||
|
||||
if (backend.streamed) {
|
||||
buf = backend.bufferDatas[i = NativeAudioSource.STREAM_MAX_BUFFERS - backend.queuedBuffers] #if !js .buffer #end;
|
||||
size = backend.bufferSize;
|
||||
pos -= Math.floor(backend.bufferTimes[i] * buffer.sampleRate * buffer.channels * wordSize);
|
||||
}
|
||||
else {
|
||||
buf = buffer.data #if !js .buffer #end;
|
||||
size = #if js buf.byteLength #else buf.length #end;
|
||||
}
|
||||
|
||||
var n = Math.floor(Math.min(buffer.sampleRate / 80, 512)), b = 0, w = 0, c = 0;
|
||||
var n = Math.floor(Math.min(buffer.sampleRate / 80, 512)), c = Math.floor((pos % (wordSize * buffer.channels)) / wordSize), b = 0, w = 0;
|
||||
pos -= pos % wordSize;
|
||||
|
||||
while (n > 0) {
|
||||
if (wordSize == 1) b = #if js buf[pos] #else buf.get(pos) #end - bitSize;
|
||||
else {
|
||||
@@ -378,13 +378,13 @@ import lime.media.openal.AL;
|
||||
|
||||
@:noCompletion private function get_leftPeak():Float
|
||||
{
|
||||
__updatePeaks();
|
||||
__updatePeaks(get_position());
|
||||
return __leftPeak * (soundTransform == null ? 1 : soundTransform.volume);
|
||||
}
|
||||
|
||||
@:noCompletion private function get_rightPeak():Float
|
||||
{
|
||||
__updatePeaks();
|
||||
__updatePeaks(get_position());
|
||||
return __rightPeak * (soundTransform == null ? 1 : soundTransform.volume);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user