diff --git a/orion-ops-ui/src/utils/bell.ts b/orion-ops-ui/src/utils/bell.ts new file mode 100644 index 00000000..b89e73e1 --- /dev/null +++ b/orion-ops-ui/src/utils/bell.ts @@ -0,0 +1,33 @@ +/** + * 钟鸣 + * @param frequency 蜂鸣器频率Hz + * @param duration 持续时间 + */ +export const playBell = (frequency: number = 400, duration: number = .2) => { + try { + // 创建 AudioContext 对象 + const audioCtx = new (window.AudioContext)(); + const buffer = audioCtx.createBuffer(1, audioCtx.sampleRate, audioCtx.sampleRate); + const channelData = buffer.getChannelData(0); + // 获取正弦波形数据 + const sampleRate = audioCtx.sampleRate; + const numSamples = Math.floor(duration * sampleRate); + const sineWaveData = []; + for (let i = 0; i < numSamples; ++i) { + const time = i / sampleRate; + // 计算当前样本点的值 + const value = Math.sin(2 * Math.PI * frequency * time); + // 将值转换为-1到+1之间的范围内 + sineWaveData[i] = value > 0 ? value : -value; + } + // 复制正弦波形数据到buffer中 + for (let i = 0; i < sineWaveData.length; ++i) { + channelData[i] = sineWaveData[i]; + } + const source = audioCtx.createBufferSource(); + source.buffer = buffer; + source.connect(audioCtx.destination); + source.start(); + } catch (e) { + } +}; diff --git a/orion-ops-ui/src/views/host/terminal/components/layout/terminal-content.vue b/orion-ops-ui/src/views/host/terminal/components/layout/terminal-content.vue index 1e9d2c2d..3b8c5c26 100644 --- a/orion-ops-ui/src/views/host/terminal/components/layout/terminal-content.vue +++ b/orion-ops-ui/src/views/host/terminal/components/layout/terminal-content.vue @@ -13,6 +13,8 @@ + +