Fingerprint Pro Internals
Collector s160

Speech voice buckets

the voice list grouped by name, which separates engine builds

Group: Audio and speech · signal map · run it live

// s160 — sig_s160_origin
// module cm, stage2, codes 1 0 -1 -2
//
// measures
//   window.origin window.AudioBuffer window.PushManager window.ServiceWorker navigator.geolocation
//   window.RTCPeerConnection navigator.vendor.indexOf("Apple") window.ApplePayError window.Counter
//   window.CSSPrimitiveValue window.RGBColor window.WebKitMediaKeys
// engine
//   Map Array.isArray() ArrayBuffer Uint32Array Uint8Array Promise undefined
// reported value
//   null value
// probes
//   "function" "voiceschanged"
// compares against
//   != "function" === 0 === 1655763047 === 548031109 > 0 >= 3 >= 4 in "ApplePayError"
//   in "AudioBuffer" in "CSSMozDocumentRule" in "CSSPrimitiveValue" in "CanvasCaptureMediaStream"
//   in "Counter" in "MozAppearance" in "PushManager" in "RGBColor" in "RTCPeerConnection"
//   in "ServiceWorker" in "WebKitMediaKeys" in "buildID" in "geolocation" in "mozInnerScreenX"
//   in "onmozfullscreenchange"
// decides on
//   fn161: typeof speechSynthesis?.getVoices != "function"
//   fn161: !arg931.tts
//   fn161: fn25()
//   fn161: function (arg934) { return !arg934.addEventListener || fn46() && fn140() || fn25() && fn48(window.origin ?? "") === 548031109; }(arg933)
//   fn161: !arg934.addEventListener || fn46() && fn140() || fn25() && fn48(window.origin ?? "") === 548031109
//   fn161: Array.isArray(v1058) && v1058.length
//   fn161: !(v1055 == null)
//   fn161: !v1055
//   h_s160_fn: fn48(arg629?.name?.slice(0, 6)) === 1655763047
//   h_s160_fn: v710.length > 0
//   h_s160_fn: v713 !== undefined
//   fn25: fn9(["ApplePayError" in window, "CSSPrimitiveValue" in window, "Counter" in window, navigator.vendor.indexOf("Apple") === 0, "RGBColor" in window, "WebKitMediaK…
//   fn46: fn9(["buildID" in navigator, "MozAppearance" in (document.documentElement?.style ?? {}), "onmozfullscreenchange" in window, "mozInnerScreenX" in window, "CSSMoz…
//   fn140: fn36([!("PushManager" in window), !("AudioBuffer" in window), !("RTCPeerConnection" in window), !("geolocation" in navigator), !("ServiceWorker" in window)]) >=…
//   fn158: Date.now() < v1036
//   visibilitychange: !(v869 || v868)
//   visibilitychange: !v869 && v868
//
// 1 owned helper inlined below.
// shared with other collectors, see agent.clean.js:
//   asUint8Array:6496 crc32OfBytes:4943 fn140:7174 fn158:8266 fn161:8448 fn25:712 fn36:1793
//   fn46:3216 fn48:3370 fn81:4410 fn9:252 stringToBytes:7901 visibilitychange:6423

// agent.clean.js:835
function sig_s160_origin(arg99) {
  return fn161(arg99, h_s160_fn);
}

// agent.clean.js:5023
function h_s160_fn(arg628) {
  const v710 = arg628.filter((arg629) => {
      return fn48(arg629?.name?.slice(0, 6)) === 1655763047;
    }),
    v711 = [];
  if (v710.length > 0) {
    const v712 = new Map();
    v710.forEach((arg630) => {
      const v713 = arg630.name.codePointAt(6);
      if (v713 !== undefined) {
        const v714 = v712.get(v713) || 0;
        v712.set(v713, v714 + 1);
      }
    });
    v712.forEach((arg631, arg632) => {
      v711.push(arg632, arg631);
    });
  }
  return { s: arg628.length ? 0 : 1, v: v711 };
}