{
  "schemaVersion": 1,
  "analysedAt": "2026-11-07T08:11:21.528323+00:00",
  "status": "passed",
  "input": {
    "sha256": "7c7ac42ad739a75ef89bdcfa4cb83f93817835c2e7fea2e469f740f385849ae6",
    "bytes": 607404,
    "format": "wav",
    "codec": "pcm_s16le",
    "sampleFormat": "s16",
    "channels": 2,
    "channelOrder": [
      "Left",
      "Right"
    ],
    "sampleRateHz": 8000,
    "bitsPerSample": 16,
    "frames": 151840,
    "durationSeconds": 18.98,
    "syntheticAudioOnly": true,
    "publicWav": "/downloads/practical-docs-2026-11-07/stereo-call-test.wav",
    "publicCopyMatchesClosedInput": true
  },
  "roles": {
    "left": {
      "party": "Agent",
      "knownToneHz": 775
    },
    "right": {
      "party": "Customer",
      "knownToneHz": 1000
    },
    "basis": "Capture owner independently observed the actual PJSIP participant roles and tone-generating user agents in the proper internal call. Roles were not inferred from this spectrum."
  },
  "method": {
    "analysisStartSeconds": 2.0,
    "analysisEndSeconds": 16.98,
    "analysisDurationSeconds": 14.98,
    "excludedStartSeconds": 2,
    "excludedEndSeconds": 2,
    "rms": "DC-removed time-domain RMS, referenced to full-scale signed 16-bit PCM amplitude 32768",
    "targetTonePower": "Goertzel at 775 Hz and 1000 Hz; Hann-window amplitude correction; one-second windows plus the final partial window, linear powers averaged with frame-count weights",
    "dbfsFloor": -160.0,
    "floorMeaning": "Digital zero or lower calculated levels are reported at the finite floor. Isolation against a floored comparison is a lower bound.",
    "normalizationCheck": {
      "kind": "Known-amplitude local sine normalization",
      "amplitude": 0.5,
      "expectedDbfs": -9.0309,
      "measuredDbfs": -9.0309,
      "toleranceDb": 0.02,
      "passed": true
    }
  },
  "thresholds": {
    "tonePresenceMinimumDbfs": -45.0,
    "requiredCrossChannelIsolationDb": 20.0,
    "requiredWithinChannelToneDominanceDb": 15.0,
    "maximumAbsoluteChannelCorrelation": 0.95,
    "minimumAnalysisSeconds": 5.0
  },
  "channels": {
    "left": {
      "rmsDbfs": -15.033481,
      "dcOffset": -6.7055e-06,
      "tonePowerDbfs": {
        "775": -15.034223,
        "1000": -160.0
      }
    },
    "right": {
      "rmsDbfs": -14.918276,
      "dcOffset": 0.0,
      "tonePowerDbfs": {
        "775": -160.0,
        "1000": -14.918277
      }
    }
  },
  "separation": {
    "agent775HzLeftMinusRightDb": 144.965777,
    "customer1000HzRightMinusLeftDb": 145.081723,
    "agentIsolationIsLowerBound": true,
    "customerIsolationIsLowerBound": true,
    "left775HzMinus1000HzDb": 144.965777,
    "right1000HzMinus775HzDb": 145.081723,
    "channelCorrelation": 0.0,
    "pcmChannelsExactlyEqual": false
  },
  "checks": {
    "actualStereoPcm16": true,
    "analysisWindowLongEnough": true,
    "agent775HzPresentOnLeft": true,
    "customer1000HzPresentOnRight": true,
    "agent775HzIsolatedToLeft": true,
    "customer1000HzIsolatedToRight": true,
    "leftChannelDominatedByAgentTone": true,
    "rightChannelDominatedByCustomerTone": true,
    "channelsAreNotDuplicated": true
  },
  "limits": [
    "One actual synthetic-tone internal recording, not a human-listening or speech-quality test.",
    "The actual agents generated separate tones; no customer or human speech is included.",
    "These measurements do not validate muting, DTMF suppression, parallel recording variants, archive retention or every call route.",
    "The original closed WAV is unchanged. No channel swapping, mixing, filtering, resampling or audio editing was used.",
    "Local WAV closure and channel measurements do not establish the database end/status lifecycle; no status bug or metadata-completion conclusion is inferred.",
    "The very large target-frequency rejection figures use a finite numerical floor and are not a measurement of broadband, perceptual or real-world speech isolation."
  ],
  "spectrum": {
    "src": "/evidence/practical-docs-2026-11-07/stereo-channel-spectrum.png",
    "width": 1444,
    "height": 768,
    "sha256": "4061e5f73015f8d3564d3ff8a67fd438432e80ff15abf538f6078e8b01cdab0d",
    "bytes": 50200,
    "kind": "Computed FFmpeg showspectrumpic from the unchanged actual WAV, channels separate; not a native VICIdial UI screenshot",
    "analysisIntervalSeconds": [
      2.0,
      16.98
    ],
    "displayedFrequencyRangeHz": [
      0,
      2000
    ],
    "visuallyReviewed": true,
    "caption": "Computed FFmpeg spectrum from the unchanged actual synthetic-call WAV, using only seconds 2.00–16.98. This separate-channel view places the right/customer 1000 Hz channel in the upper panel and the left/agent 775 Hz channel in the lower panel. It is an audio-analysis plot, not a native VICIdial screenshot or a human-listening test.",
    "alt": "Computed separate-channel spectrum shows customer 1000 Hz in the upper right-channel panel and agent 775 Hz in the lower left-channel panel",
    "visualReview": {
      "upperPanel": "Right / customer / 1000 Hz",
      "lowerPanel": "Left / agent / 775 Hz",
      "observation": "Distinct persistent principal-frequency bands, with no swapped or duplicated principal channel in the declared numerical checks."
    }
  },
  "recordingLifecycleObservation": {
    "recordingLogStatusReportedAtHandoff": "START",
    "nativeHangupDispositionReportedByCaptureOwner": true,
    "interpretation": "This local audio analysis makes no conclusion about the database end/status semantics."
  }
}
