{"version":3,"file":"spectrum.cjs","sources":["../../../../../src/elements/oscilloscope/renderers/spectrum.js"],"sourcesContent":["import paper from '@chnak/paper';\n\n/**\n * 频谱样式默认配置\n */\nexport const defaultConfig = {};\n\n/**\n * 频谱波形渲染器（类似频谱分析仪）\n * @param {Object} element - 元素实例\n * @param {Array} data - 波形数据\n * @param {number} x - X坐标\n * @param {number} y - Y坐标\n * @param {number} width - 宽度\n * @param {number} height - 高度\n * @param {number} time - 当前时间\n * @param {Object} config - 配置对象（合并了默认配置和用户配置）\n */\nexport default function renderSpectrum(element, data, x, y, width, height, time, config = {}) {\n  // 合并默认配置\n  const cfg = { ...defaultConfig, ...config };\n  const centerY = y + height / 2;\n  const barCount = 64; // 频谱条数\n  const step = Math.max(1, Math.floor(data.length / barCount));\n  const barWidth = (width / barCount) * 0.8;\n  const barGap = (width / barCount) * 0.2;\n  const amplitude = (height / 2) * element.sensitivity;\n\n  for (let i = 0; i < barCount; i++) {\n    const dataIndex = i * step;\n    if (dataIndex >= data.length) break;\n\n    // 计算该段的 RMS（均方根）\n    let sumSquares = 0;\n    let count = 0;\n    for (let j = dataIndex; j < Math.min(dataIndex + step, data.length); j++) {\n      sumSquares += data[j] * data[j];\n      count++;\n    }\n    const rms = count > 0 ? Math.sqrt(sumSquares / count) : 0;\n\n    const barX = x + i * (barWidth + barGap);\n    const barHeight = rms * amplitude * 2;\n\n    // 绘制频谱条（从中心向上）\n    const bar = new paper.Path.Rectangle({\n      rectangle: new paper.Rectangle(\n        barX,\n        centerY - barHeight,\n        barWidth,\n        barHeight\n      ),\n      fillColor: element.waveColor,\n    });\n\n    // 如果启用镜像，绘制下半部分\n    if (element.mirror) {\n      const barBottom = new paper.Path.Rectangle({\n        rectangle: new paper.Rectangle(\n          barX,\n          centerY,\n          barWidth,\n          barHeight\n        ),\n        fillColor: element.waveColor,\n      });\n    }\n  }\n}\n\nrenderSpectrum.style = 'spectrum';\n\n"],"names":[],"mappings":";;;;;;AAEA;AACA;AACA;AACY,MAAC,aAAa,GAAG;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE;AAC9F;AACA,GAAc,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM;AAC3C,EAAE,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AAChC,EAAE,MAAM,QAAQ,GAAG,EAAE,CAAC;AACtB,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AAC9D,EAAE,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,QAAQ,IAAI,GAAG;AAC3C,EAAE,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,QAAQ,IAAI,GAAG;AACzC,EAAE,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW;;AAEtD,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACrC,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI;AAC9B,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;;AAElC;AACA,IAAI,IAAI,UAAU,GAAG,CAAC;AACtB,IAAI,IAAI,KAAK,GAAG,CAAC;AACjB,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9E,MAAM,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrC,MAAM,KAAK,EAAE;AACb,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC;;AAE7D,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC;AAC5C,IAAI,MAAM,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,CAAC;;AAEzC;AACA,IAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,MAAM,SAAS,EAAE,IAAI,KAAK,CAAC,SAAS;AACpC,QAAQ,IAAI;AACZ,QAAQ,OAAO,GAAG,SAAS;AAC3B,QAAQ,QAAQ;AAChB,QAAQ;AACR,OAAO;AACP,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS;AAClC,KAAK;;AAEL;AACA,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE;AACxB,MAAwB,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACjD,QAAQ,SAAS,EAAE,IAAI,KAAK,CAAC,SAAS;AACtC,UAAU,IAAI;AACd,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB,UAAU;AACV,SAAS;AACT,QAAQ,SAAS,EAAE,OAAO,CAAC,SAAS;AACpC,OAAO;AACP,IAAI;AACJ,EAAE;AACF;;AAEA,cAAc,CAAC,KAAK,GAAG,UAAU;;;;;"}