返回顶部
首页 > 资讯 > 精选 >Web Audi怎么绘制音频图谱
  • 807
分享到

Web Audi怎么绘制音频图谱

2023-07-05 11:07:49 807人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“WEB Audi怎么绘制音频图谱”,内容详细,步骤清晰,细节处理妥当,希望这篇“Web Audi怎么绘制音频图谱”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现思路先

本文小编为大家详细介绍“WEB Audi怎么绘制音频图谱”,内容详细,步骤清晰,细节处理妥当,希望这篇“Web Audi怎么绘制音频图谱”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

实现思路

先介绍下小编的整体思路吧。所谓的音频图谱,其实只是将声音的响度具象化为一个波形图,响度高对应的波形高,响度低波形也就低。所以第一步,我们可以通过xhr拿到一个音频文件的数据。那么,第二步便是如何处理这组数据,让数据能够比较真实的反应音频的响度。这时候就需要前端的Web Audio api来发挥作用了,具体如何处理,我们后面详细说明。完成数据处理之后,最后一步就是需要根据数据绘制出波形图,这里我们使用canvas来做波形图的绘制。

获取音频文件

首先,我们利用fetch,来获取一个线上音频。这里,我们借用一下wavesuffer官网demo中用的线上音频来做示范。

// 音频urllet audioUrl = 'https://wavesurfer-js.org/example/media/demo.wav';// 创建音频上下文let audioctx = new (window.AudioContext || window.webkitAudioContext)();// 创建音频源let source = audioCtx.createBufferSource();fetch(audioUrl, {  method: 'GET',  responseType: 'arraybuffer',}).then(res => {  return res.arrayBuffer();}).then(data => {  // 处理音频数据  initAudio(data);});

利用Web Audio Api 处理音频数据

拿到音频数据之后,我们需要利用Web Audio Api,来处理音频数据,实现音频的播放,暂停等操作以及我们后续的波形图绘制。这里简单介绍下,Web Audio Api是一组非常强大的Api,它提供了在Web中控制音频、处理音频的一整套有效通用的系统。它能够允许开发着,控制音频,自选音频源、对音频添加特效,使音频可视化,添加空间效果,添加混响等等。而我们今天要实现的功能,仅仅只用到了其中几个Api,整体流程如下:

Web Audi怎么绘制音频图谱

// audio 初始化function initAudio (data) {  // 音频数据解码  // decodeAudioData方法接收一个arrayBuffer数据作为参数,这也是为什么前面fetch音频时设置以arrayBuffer格式接收数据  audioCtx.decodeAudioData(data).then(buffer => {    // decodeAudioData解码完成后,返回一个AudioBuffer对象    // 绘制音频波形图    drawWave(buffer);    // 连接音频源    source.buffer = buffer;    source.connect(audioCtx.destination);    // 音频数据处理完毕    alert('音频数据处理完毕!');  });}// web audio 规范不允许音频自动播放,需要用户触发页面事件来触发播放,这里我们增加一个播放按钮,数据处理完毕后点击播放document.querySelector('#btn').onclick = () => {  // 播放音频  source.start(0);}

通过解码后的音频数据,绘制波形图

音频数据通过AudioContext解码后,返回一个AudioBuffer对象,这个对象,保存有音频的采样率、声道、pcm数据等信息。通过getChannelData方法可以获取到音频某个声道的pcm数据。返回的是一个Float32Array对象,数值范围在-1到1之间。音频数据比较庞大,每一秒钟可能包含成千上万的数据,因此我们在做图形绘制时,需要对数据进一步采样。比如,这里我们采用每1000条数据中,取一个最大值(正数)一个最小值(负数)来绘制图形;

// 绘制波形图function drawWave (buffer) {  // buffer.numberOfChannels返回音频的通道数量,1即为单声道,2代表双声道。这里我们只取一条通道的数据  let data = [];  let originData = buffer.getChannelData(0);  // 存储所有的正数据  let positives = [];  // 存储所有的负数据  let negatives = [];  // 先每隔100条数据取1条  for (let i = 0; i < originData.length; i += 100) {    data.push(originData[i]);  }  // 再从data中每10条取一个最大值一个最小值  for (let j = 0, len = parseInt(data.length / 10); j < len; j++) {    let temp = data.slice(j * 10, (j + 1) * 10);    positives.push(Math.max.apply(null, temp));    negatives.push(Math.min.apply(null, temp));  }  // 创建canvas上下文  let canvas = document.querySelector('#canvas');  if (canvas.getContext) {    let ctx = canvas.getContext('2d');    canvas.width = positives.length;    let x = 0;    let y = 100;    let offset = 0;    ctx.fillStyle = '#fa541c';    ctx.beginPath();    ctx.moveTo(x, y);    // canvas高度200,横坐标在canvas中点100px的位置,横坐标上方绘制正数据,下方绘制负数据    // 先从左往右绘制正数据    // x + 0.5是为了解决canvas 1像素线条模糊的问题    for (let k = 0; k < positives.length; k++) {      ctx.lineTo(x + k + 0.5, y - (100 * positives[k]));    }    // 再从右往左绘制负数据    for (let l = negatives.length - 1; l >= 0; l--) {      ctx.lineTo(x + l + 0.5, y + (100 * Math.abs(negatives[l])));    }    // 填充图形    ctx.fill();  }};

读到这里,这篇“Web Audi怎么绘制音频图谱”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Web Audi怎么绘制音频图谱

本文链接: https://lsjlt.com/news/351207.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Web Audi怎么绘制音频图谱
    本文小编为大家详细介绍“Web Audi怎么绘制音频图谱”,内容详细,步骤清晰,细节处理妥当,希望这篇“Web Audi怎么绘制音频图谱”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实现思路先...
    99+
    2023-07-05
  • python如何绘制音频的语谱图
    这篇文章主要介绍python如何绘制音频的语谱图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文介绍如何通过python的pyplot来绘制音频的语谱图。语谱图,也就是语音频谱图,也叫时频图,横坐标是时间,纵坐标是...
    99+
    2023-06-19
  • 一文详解WebAudi绘制音频图谱
    目录背景实现思路获取音频文件利用Web Audio Api 处理音频数据通过解码后的音频数据,绘制波形图背景 前端处理音频,目前一些开源的插件和js库已经提供了非常好的支持。其中小...
    99+
    2023-03-09
    Web Audio绘制音频图谱 Web Audio
  • 怎么在Matlab中利用fft绘制信号频谱图
    这篇文章将为大家详细讲解有关怎么在Matlab中利用fft绘制信号频谱图,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。fs=500;%采样率f1=5;%信号频率f2=10;%信号频率T=1;...
    99+
    2023-06-14
  • word怎么绘制家谱图结构图
    要绘制家谱图或者结构图,可以使用word中的形状和线条工具来绘制。以下是一种绘制家谱图的方法:1. 打开Word文档,选择“插入”选...
    99+
    2023-09-16
    Word
  • wavesurfer.js绘制音频波形图的实现
    1.查看效果图 向前选中: 向后选中: 代码如下(示例): <template> <div class="waveSurfer"> <d...
    99+
    2024-04-02
  • canvas怎么绘制视频封面
    小编给大家分享一下canvas怎么绘制视频封面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、需求:上传视频,同时截取视频某一帧作为视频的封面。二、实现思路:利...
    99+
    2023-06-09
  • java怎么绘制图形
    Java中可以使用AWT和Swing库来绘制图形。1. 使用AWT库绘制图形:- 创建一个继承自`java.awt.Canvas`的...
    99+
    2023-10-07
    java
  • CSS怎么绘制图形
    这篇文章主要介绍了CSS怎么绘制图形的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS怎么绘制图形文章都会有所收获,下面我们一起来看看吧。正方形/长方形<!DOCTYPE html>&l...
    99+
    2023-06-27
  • Python怎么绘制三维图_Python绘制三维图教程
    1、首先打开python。 2、然后创建python文件。 3、引入相关python库。 4、接着定义数据。 5、定义三维函数。 6、再绘制三维图。 7、点击【Run】运行程序...
    99+
    2024-04-02
  • HTML5怎么在Web上制造声音
    本篇内容主要讲解“HTML5怎么在Web上制造声音”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5怎么在Web上制造声音”吧! HTML5在Web上制...
    99+
    2024-04-02
  • 怎么用Canvas绘制图形
    这篇文章主要讲解了“怎么用Canvas绘制图形”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Canvas绘制图形”吧!   Canvas绘制图形 ...
    99+
    2024-04-02
  • HTML5中怎么绘制图形
    本篇内容主要讲解“HTML5中怎么绘制图形”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么绘制图形”吧! HTML5中...
    99+
    2024-04-02
  • python怎么绘制函数图
    在python中使用matplotlib模块和numpy模块绘制函数图,具体方法如下:import matplotlib.pyplot as pyplotimport numpyx=numpy.linspace(-10,10,20...
    99+
    2024-04-02
  • Word怎么绘制三线图
    要在Word中绘制三线图,可以按照以下步骤操作:1. 打开Word文档,点击“插入”选项卡,选择“图表”按钮。2. 在弹出的图表选择...
    99+
    2023-09-15
    Word
  • matplotlib怎么绘制柱状图
    要使用matplotlib绘制柱状图,可以使用`matplotlib.pyplot`模块中的`bar()`函数。以下是一个简单的示例...
    99+
    2023-09-20
    matplotlib
  • Matlab怎么绘制桑基图
    这篇文章主要为大家展示了“Matlab怎么绘制桑基图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Matlab怎么绘制桑基图”这篇文章吧。这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概...
    99+
    2023-06-29
  • python散点图怎么绘制
    这篇“python散点图怎么绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python散点图怎么绘制”文章吧。一、二维散...
    99+
    2023-06-29
  • Matlab怎么绘制雨云图
    本篇内容主要讲解“Matlab怎么绘制雨云图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Matlab怎么绘制雨云图”吧!介绍写了俩代码模板,用来绘制横向云雨图与纵向云雨图,云雨图其实就是用把小...
    99+
    2023-06-30
  • python怎么绘制折线图
    在Python中,可以使用Matplotlib库来绘制折线图。下面是一个简单的示例:```pythonimport matplotl...
    99+
    2023-08-19
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作