Correct audio metering and realtime displays
This commit is contained in:
+13
-1
@@ -444,6 +444,11 @@ async function applyIncomingAudioPacket(env, packet, CONFIG, sampleTs = performa
|
||||
if (typeof d.correlationNegativePeak === 'number') {
|
||||
env.audio.correlationNegativePeak = d.correlationNegativePeak;
|
||||
}
|
||||
env.audio.phaseAngleRad = typeof d.phaseAngleRad === 'number' ? d.phaseAngleRad : null;
|
||||
env.audio.phaseSeq = Number.isFinite(seq) ? seq : ((env.audio.phaseSeq || 0) + 1);
|
||||
if (typeof d.phaseCoherence === 'number') env.audio.phaseCoherence = d.phaseCoherence;
|
||||
if (typeof d.phaseLevel === 'number') env.audio.phaseLevel = d.phaseLevel;
|
||||
if (typeof d.phasePeak === 'number') env.audio.phasePeak = d.phasePeak;
|
||||
if (d.waveL && env.audio.pushWaveSamples) {
|
||||
const channelCount = d.waveChannels || (d.waveR ? 2 : 1);
|
||||
env.audio.sampleRate = d.sampleRate || env.audio.sampleRate || 48000;
|
||||
@@ -502,6 +507,10 @@ function buildPhoenixMeterPacket(frame) {
|
||||
const ppmBoxR = Number(frame?.ppm_box_r);
|
||||
const correlation = Number(frame?.correlation);
|
||||
const correlationNegativePeak = Number(frame?.correlation_negative_peak);
|
||||
const phaseAngleRad = Number(frame?.phase_angle_rad);
|
||||
const phaseCoherence = Number(frame?.phase_coherence);
|
||||
const phaseLevel = Number(frame?.phase_level);
|
||||
const phasePeak = Number(frame?.phase_peak);
|
||||
const xyL = Array.isArray(frame?.xy_l) ? frame.xy_l : null;
|
||||
const xyR = Array.isArray(frame?.xy_r) ? frame.xy_r : null;
|
||||
const waveL = Array.isArray(frame?.wave_l) && frame.wave_l.length ? frame.wave_l : null;
|
||||
@@ -515,6 +524,10 @@ function buildPhoenixMeterPacket(frame) {
|
||||
correlationNegativePeak: Number.isFinite(correlationNegativePeak)
|
||||
? Math.max(-1, Math.min(1, correlationNegativePeak))
|
||||
: 0,
|
||||
phaseAngleRad: Number.isFinite(phaseAngleRad) ? phaseAngleRad : null,
|
||||
phaseCoherence: Number.isFinite(phaseCoherence) ? Math.max(0, Math.min(1, phaseCoherence)) : 0,
|
||||
phaseLevel: Number.isFinite(phaseLevel) ? Math.max(0, phaseLevel) : 0,
|
||||
phasePeak: Number.isFinite(phasePeak) ? Math.max(0, phasePeak) : 0,
|
||||
rmsL: Number.isFinite(rmsL) ? rmsL : -120,
|
||||
rmsR: Number.isFinite(rmsR) ? rmsR : -120,
|
||||
tpL: Number.isFinite(tpL) ? tpL : -120,
|
||||
@@ -926,7 +939,6 @@ export function buildRtaRuntimeConfig(CONFIG = {}) {
|
||||
inputOffsetDbR: Number.isFinite(CONFIG.INPUT_OFFSET_DB_R) ? CONFIG.INPUT_OFFSET_DB_R : -5,
|
||||
ppmDinAttackMs: 10,
|
||||
ppmDinDecayDbPerS: 20 / 1.5,
|
||||
ppmDinFastAttack: !!CONFIG.PPM_DIN_FAST_ATTACK,
|
||||
ppmEbuAttackMs: 10,
|
||||
ppmEbuDecayDbPerS: 24 / 2.8,
|
||||
lufsIWindowMin: Number.isFinite(CONFIG.LUFS_I_WINDOW_MIN) ? CONFIG.LUFS_I_WINDOW_MIN : 4,
|
||||
|
||||
Reference in New Issue
Block a user