2025-04-14【Web Api】多种Web Api 细节

1 音频处理

  • new AudioContext()new window.AudioContext()的区别
场景 推荐写法 说明
现代浏览器(无兼容性需求) new AudioContext() 简洁直接,无需额外处理。
需兼容旧浏览器(如需前缀) new (window.AudioContext || window.webkitAudioContext)() 处理 webkitAudioContext 的前缀问题。
严格模式或模块作用域 new window.AudioContext() 避免作用域问题,确保全局变量的访问。

通过结合 window 对象和前缀检查,可以确保代码在不同环境下的兼容性和可靠性。

  • 两种音频幅值的调节方法
bars.value = bars.value.map((bar, index) => {
        let amplitude = frequenceData[index] / 255 * 100  // 转为0-100的音量值
        amplitude = Number.isNaN(amplitude) ? 2 : amplitude
        amplitude = Math.max(2, Math.min(100, amplitude)) // 钳制在2-100范围
        return {
            height: amplitude
        }
        // 非线性放大 + 动态范围控制
        let amp = Math.pow(frequenceData[index] / 255, 3) * 80;
        amp = Number.isNaN(amp) ? 2 : amp
        amp = Math.max(2, Math.min(100, amp)) // 钳制在2-100范围
        return { height: amp }
    })

  • 打包后可能发生权限问题,需更改主进程配置
    调用麦克风时,目前只需要在渲染进程(Vue组件)中做如下配置
navigator.mediaDevices.getUserMedia({ audio: true })
    .then((stream) => {
        audioContext = new AudioContext()
        const source = audioContext.createMediaStreamSource(stream)
        const analyser = audioContext.createAnalyser()
        source.connect(analyser)
        analyser.connect(audioContext.destination)
        console.log('麦克风接入成功', source)
        
    })
    .catch((error) => {
        console.log('麦克风接入失败', error)
    })

且打包后也暂时没有出现不可使用的错误,但不排除后续在其他平台上可能会发生权限错误,现记录解决办法,更改主进程配置
如果主进程添加了一些安全配置

webPreferences: {
// 安全配置
  contextIsolation: true,
  sandbox: true,
// 其他配置
 nodeIntegration: true,
 contextIsolation: false,
 enableRemoteModule: true,
 // 关键点:允许媒体访问
 media: true,
}

则必须在主进程处理权限请求:

app.on('web-contents-created', (event, contents) => {
  contents.session.setPermissionRequestHandler((webContents, permission, callback) => {
    if (permission === 'media') {
      callback(true); // 允许麦克风、摄像头
    } else {
      callback(false);
    }
  });
});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前端开发知识点 HTML&CSS对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型...
    Hebborn_hb阅读 851评论 0 1
  • 1.一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势。 2.项目介绍...
    这是这时阅读 640评论 0 4
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,670评论 1 45
  • web前端面试题分为:html/css面试题、javascript面试题、vue面试题、性能优化面试题、网络方面面...
    终身成长人格阅读 10,895评论 0 3
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,606评论 0 7