如何为计时项目添加响铃功能?实现倒计时结束时5秒高频提示音
实现计时结束的5秒高频提示音方法
前端 JavaScript 实现
直接用Web Audio API生成高频正弦波,无需依赖外部音频文件:
function playHighBeep() { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 800; // 设置800Hz高频 oscillator.type = 'sine'; // 正弦波音质更柔和清晰 gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); // 控制音量避免刺耳 oscillator.start(); oscillator.stop(audioContext.currentTime + 5); // 5秒后自动停止 } // 计时结束时调用该函数即可 // playHighBeep();
注意:浏览器安全限制要求,AudioContext必须在用户交互(如点击、触摸)后初始化,所以要确保调用时机在用户操作触发的逻辑内。
Python 实现
跨平台方案(依赖simpleaudio库)
先安装依赖:pip install simpleaudio
import numpy as np import simpleaudio as sa def play_high_beep(): sample_rate = 44100 duration = 5 frequency = 800 # 生成5秒的正弦波音频数据 t = np.linspace(0, duration, int(sample_rate * duration), False) audio = np.sin(frequency * t * 2 * np.pi) # 转换为16位整数格式 audio = (audio * 32767 * 0.3).astype(np.int16) # 播放音频 play_obj = sa.play_buffer(audio, 1, 2, sample_rate) play_obj.wait_done() # 计时结束调用 # play_high_beep()
Windows原生方案(无需第三方库)
import winsound def play_high_beep(): # 800Hz频率,持续5000毫秒 winsound.Beep(800, 5000) # play_high_beep()
Java 实现
用Java Sound API生成并播放音频:
import javax.sound.sampled.*; public class BeepPlayer { public static void playHighBeep() throws LineUnavailableException { int sampleRate = 44100; int duration = 5; double frequency = 800; // 生成音频字节数据 byte[] audioData = new byte[sampleRate * duration * 2]; for (int i = 0; i < audioData.length; i += 2) { double time = i / (double) (sampleRate * 2); short sample = (short) (Math.sin(2 * Math.PI * frequency * time) * 32767 * 0.3); audioData[i] = (byte) (sample & 0xFF); audioData[i + 1] = (byte) ((sample >> 8) & 0xFF); } // 配置音频格式并播放 AudioFormat format = new AudioFormat(sampleRate, 16, 1, true, false); DataLine.Info info = new DataLine.Info(Clip.class, format); Clip clip = (Clip) AudioSystem.getLine(info); clip.open(format, audioData, 0, audioData.length); clip.start(); try { Thread.sleep(duration * 1000); } catch (InterruptedException e) { e.printStackTrace(); } clip.close(); } public static void main(String[] args) { try { playHighBeep(); } catch (LineUnavailableException e) { e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Cool_Dude
相关产品推荐
相关产品推荐

