前端:音頻可視化(H5+js版本)

一、效果展示

HTML5+JS實現一個簡單的音頻可視化

二、代碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>音頻可視化</title><style></style></head><body><divstyle="display: flex;justify-content: center;align-items: center;flex-direction: column;"><divclass="musicBox"style="position: relative; width: 500px; height: 500px"><canvasid="audioCanvas"width="500"height="500"style="position: absolute; left: 0; top: 0"></canvas><svgt="1716202136861"class="icon"viewBox="0 0 1024 1024"version="1.1"xmlns="http://www.w3.org/2000/svg"p-id="4458"width="68"height="68"style="position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);"><pathd="M701.6 196.53m-15 0a15 15 0 1 0 30 0 15 15 0 1 0-30 0Z"fill="#E159D3"p-id="4459"></path><pathd="M956.29 310.21a482.39 482.39 0 1 0-847.9 452v120.36c0 71.4 58.42 130.76 129.82 130.1a127.79 127.79 0 0 0 100.44-49.85 120.4 120.4 0 0 0 21-103.43c-5.58-21.49-11.71-59-11.71-71.71S354 737.47 359.62 716a120.4 120.4 0 0 0-21-103.43 128.55 128.55 0 0 0-209.75 9.13c-20.91-64.82-25.25-135-11.25-205.6 28.7-144.71 172.14-286.19 317.16-313.27C690.37 55.1 914.24 250.88 914.24 498a402.4 402.4 0 0 1-19.36 123.71 128.55 128.55 0 0 0-209.74-9.13 120.4 120.4 0 0 0-21 103.43c5.58 21.49 11.71 59 11.71 71.71s-6.13 50.22-11.71 71.71a120.4 120.4 0 0 0 21 103.43 127.8 127.8 0 0 0 101.67 49.85 128.59 128.59 0 0 0 128.58-128.62V762.25a483 483 0 0 0 40.9-452z m-767.9 381.87c0-26.24 20.49-48.33 46.71-49.34a48.41 48.41 0 0 1 40.41 18.85 39.94 39.94 0 0 1 6.78 34.34c-5.84 22.48-14.29 68.12-14.29 91.85s8.45 69.37 14.29 91.85a39.94 39.94 0 0 1-6.78 34.37A48.38 48.38 0 0 1 237 932.86a48.64 48.64 0 0 1-48.64-48.64z m647 191.4c0 26.24-20.49 48.33-46.71 49.34a48.41 48.41 0 0 1-40.4-18.82 39.94 39.94 0 0 1-6.78-34.34c5.84-22.48 14.29-68.12 14.29-91.85s-8.45-69.37-14.29-91.85a39.94 39.94 0 0 1 6.78-34.34 48.41 48.41 0 0 1 40.41-18.85c26.22 1 46.71 23.1 46.71 49.34z"fill="#E159D3"p-id="4460"></path><pathd="M651.51 154.09a371.39 371.39 0 0 0-419.35 100.28 373.69 373.69 0 0 0-30.07 39.56 15 15 0 1 0 25 16.52A341.48 341.48 0 0 1 512 157a339.17 339.17 0 0 1 128.23 24.93 15 15 0 1 0 11.29-27.79z"fill="#E159D3"p-id="4461"></path><pathd="M456.91 668.17c-20.66 1.25-37.52 19.95-37.52 40.65v157.92c0 20.7 16.85 39.4 37.52 40.65a40 40 0 0 0 42.48-39.93V708.1a40 40 0 0 0-42.48-39.93zM563.91 698.12c-20.66 1.25-37.52 19.95-37.52 40.65v98c0 20.7 16.85 39.4 37.52 40.65a40 40 0 0 0 42.48-39.93V738a40 40 0 0 0-42.48-39.88z"fill="#48BCFF"p-id="4462"></path></svg></div><audio id="audio" src="./audio/游戲城大冒險.mp3" controls></audio></div></body><script>//需要可視化的數據let audioArr;//我們需要一個音樂播放器和一個canvas進行顯示const audioElement = document.getElementById("audio");const canvas = document.getElementById("audioCanvas");//canvas的一些基本設置const ctx = canvas.getContext("2d");const centerX = canvas.width / 2;const centerY = canvas.height / 2;const radius = 50; // 圓的半徑//初始化let isInit = false;let analyser = null;// 當音樂播放audioElement.onplay = () => {if (!isInit) {isInit = true;}const audioContext = new AudioContext(); // 創建音頻上下文const audioSrc = audioContext.createMediaElementSource(audioElement); // 創建音頻源analyser = audioContext.createAnalyser(); // 創建分析器analyser.fftSize = 128; // 設置傅里葉變換的大小,影響線條密度audioArr = new Uint8Array(analyser.frequencyBinCount); // 創建一個無符號字節數組存儲頻率數據,該API參考ES6文檔audioSrc.connect(analyser); // 連接音頻源和分析器analyser.connect(audioContext.destination); // 連接分析器和音頻目的地//動畫開始animate();};// 繪制圓形const drawGradientCircle = () => {ctx.beginPath();// 創建一個從中心點向外的徑向漸變const grd = ctx.createLinearGradient(centerX - radius,centerY - radius,centerX + radius,centerY + radius);grd.addColorStop("0", "purple");grd.addColorStop("0.3", "magenta");grd.addColorStop("0.5", "blue");grd.addColorStop("0.6", "green");grd.addColorStop("0.8", "yellow");grd.addColorStop(1, "red");ctx.strokeStyle = grd;ctx.arc(centerX, centerY, radius - 2, 0, Math.PI * 2); // 繪制一個完整的圓ctx.stroke(); // 畫圓復制代碼};//繪制線條const drawLinesFromCircle = () => {ctx.lineWidth = 2;//使用音頻的頻率數據繪制線條//為了美觀,我們繪制兩條線,一條是頻率數據,另一條是對稱的//也可以去使用其它的方式繪制線條audioArr.forEach((value, index) => {const baseAngle = (index / audioArr.length) * Math.PI * 2; // 基礎角度const angle1 = baseAngle; // 第一條線的角度const angle2 = baseAngle + Math.PI; // 對稱線的角度,相差π(180度)// 繪制第一條線{const endX1 = centerX + radius * Math.cos(angle1);const endY1 = centerY + radius * Math.sin(angle1);const startX1 = centerX + (radius + value * 0.4) * Math.cos(angle1); // 使用value控制長度const startY1 = centerY + (radius + value * 0.4) * Math.sin(angle1);ctx.beginPath();ctx.moveTo(startX1, startY1);ctx.lineTo(endX1, endY1);ctx.strokeStyle = `hsl(${index * 3.6}, 100%, 50%)`;ctx.stroke();}// 繪制對稱的第二條線{const endX2 = centerX + radius * Math.cos(angle2);const endY2 = centerY + radius * Math.sin(angle2);const startX2 = centerX + (radius + value * 0.4) * Math.cos(angle2);const startY2 = centerY + (radius + value * 0.4) * Math.sin(angle2);ctx.beginPath();ctx.moveTo(startX2, startY2);ctx.lineTo(endX2, endY2);ctx.strokeStyle = `hsl(${(index + audioArr.length / 2) * 3.6}, 100%, 50%)`; // 調整顏色以保持對稱性且有所區別ctx.stroke();}});};//播放動畫const animate = () => {ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除畫布if (!isInit) return;analyser.getByteFrequencyData(audioArr); // 獲取頻率數據drawGradientCircle(); // 繪制圓形drawLinesFromCircle(); // 繪制伸展的線條requestAnimationFrame(animate); // 重復繪制以創建動畫效果};</script>
</html>

三、VUE3+TS版本

前端:音頻可視化(VUE3+TS版本)-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13836.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13836.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13836.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

非平穩信號的傅里葉變換與短時傅里葉變換

一、仿真一個非平穩的時間序列。 N 10000; t 0:N-1; z1 4.2*sin(2*pi/20.*t5); z2 2.2*sin(2*pi/100.*(10.001*t).*t8); w1 randn(length(t),1); yz1z2w1; figure;plot(y,LineWidth,1.5);grid on; ylabel(Signal); xlabel(Time); 二、傅里葉變換&#xff08;FFT&#xff…

教育智能化的歷史及發展趨勢

1. 教育智能化概述 1.1 定義與背景 教育智能化是指利用人工智能、大數據、云計算等現代信息技術&#xff0c;對教育過程進行智能化改造&#xff0c;提升教育質量與效率。隨著技術進步&#xff0c;教育智能化已成為全球教育改革的重要趨勢。 教育智能化的背景可以追溯到20世紀…

Llama 3超級課堂作業筆記

文章目錄 基礎作業完成 Llama 3 Web Demo 部署環境配置下載模型Web Demo 部署對話截圖 使用 XTuner 完成小助手認知微調Web Demo 部署自我認知訓練數據集準備訓練模型推理驗證 使用 LMDeploy 成功部署 Llama 3 模型環境&#xff0c;模型準備LMDeploy CLI chatLMDeploy模型量化(…

SQL Server 2022安裝+SQL Server最新補丁+smss工具連接超詳細教程

文章目錄 一、SQL Server 2022安裝二、SSMS的安裝與連接三、最新補丁下載總結 一、SQL Server 2022安裝 官網下載安裝包&#xff1a;https://www.microsoft.com/en-us/sql-server/sql-server-downloads 打開 選擇自定義 更改你要安裝到的位置后進行安裝 安裝程序包下載完后會自…

將本地項目代碼上傳到別人GitHub的遠程分支上流程記錄

首先將別人的項目克隆到本地&#xff1a; git clone 項目地址 然后cd進項目中&#xff0c;查看分支名稱&#xff1a; git branch git branch -a 切換分支&#xff1a; git checkout 遠程分支名 &#xff08;必須與所要提交代碼的遠程分支同名&#xff09; 截圖案例&#xff1…

簡單的TCP網絡程序:英譯漢服務器

一、服務器的初始化 下面介紹程序中用到的socket API,這些函數都在sys/socket.h中。 1.創建套接字 socket()&#xff1a; ?參數介紹&#xff1a; socket()打開一個網絡通訊端口,如果成功的話,就像open()一樣返回一個文件描述符;應用程序可以像讀寫文件一樣用read/write在網…

AI大模型日報#0523:中國大模型價格戰的真相、大模型「上車」、王小川首款 AI 應用

導讀&#xff1a;AI大模型日報&#xff0c;爬蟲LLM自動生成&#xff0c;一文覽盡每日AI大模型要點資訊&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一萬物”&#xff08;Yi-Large&#xff09;生成了今日要點以及每條資訊的摘要。歡迎閱讀&#xf…

04. Redis 配置文件

文章目錄 單位包含網絡 NETWORK通用 GENERAL快照 SNAPSHOTTING主從復制 REPLICATION安全 SECURITY客戶端 CLIENTS內存設置 MEMORY MANAGEMENTAPPEND ONLY MODE 模式&#xff08;aof 的配置&#xff09; 單位 配置文件對大小寫不敏感&#xff08;unit單位&#xff09;。 包含 …

Flutter 中的 WillPopScope 小部件:全面指南

Flutter 中的 WillPopScope 小部件&#xff1a;全面指南 在 Flutter 應用開發中&#xff0c;WillPopScope 是一個非常有用的小部件&#xff0c;它允許開發者攔截和處理用戶嘗試退出當前頁面的操作。這在需要確認用戶是否真的想要離開當前頁面&#xff0c;或者在離開前需要執行…

京東h5st加密參數分析與批量商品價格爬取(文末含純算法)

文章目錄 1. 寫在前面2. 接口分析3. 加密分析4. 算法還原【??作者主頁】:吳秋霖 【??作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致力于Python與爬蟲領域研究與開發工作! 【??作者推…

羅德與施瓦茨ZNB20矢量網絡分析儀怎么讀取Trace?

矢量網絡分析儀(VNA)是電子測量領域廣泛應用的重要儀器&#xff0c;可以幫助工程師精確測量各種射頻和微波設備的參數&#xff0c;為設計優化、故障診斷等提供關鍵數據支持。作為業界領先的VNA制造商&#xff0c;羅德與施瓦茨的ZNB20型號在測量精度、動態范圍、掃描速度等方面都…

家政預約小程序05服務管理

目錄 1 設計數據源2 后臺管理3 后端API4 調用API總結 家政預約小程序的核心是展示家政公司提供的各項服務的能力&#xff0c;比如房屋維護修繕&#xff0c;家電維修&#xff0c;育嬰&#xff0c;日常保潔等。用戶在選擇家政服務的時候&#xff0c;價格&#xff0c;評價是影響用…

中國網對話神工坊創始人任虎: 先進計算技術賦能,領跑自主CAE新時代

隨著"中國制造2025"收官在即&#xff0c;智能制造和工業互聯網的發展勢頭更勁。作為現代工業的基石&#xff0c;工業軟件已成為推動工業數字化轉型的關鍵力量。 近日&#xff0c;神工坊創始人&CEO任虎先生接受了中國網記者的專訪&#xff0c;就“國產CAE軟件的崛…

C++中的Lambda的定義與使用

文章目錄 前言Lambda的定義與使用方式總結 Lambda的使用和細節 前言 在C11引入了Lambda表達式&#xff0c;它是一種方便的匿名函數&#xff0c;可以在需要時臨時定義函數&#xff0c;并且可以捕獲局部變量。下面是Lambda表達式的定義與使用方式&#xff0c;并對其進行總結 La…

【東山派Vision K510開發板試用筆記】nncase的安裝

概述 最近試用了百問網提供的東山派Vision開發板&#xff0c;DongshanPI-Vision開發板是百問網針對AI應用開發設計出來的一個RSIC-V架構的AI開發板&#xff0c;主要用于學習使用嘉楠的K510芯片進行Linux項目開發和嵌入式AI應用開發等用途。DongshanPI-Vision開發板采用嘉楠公司…

持續總結中!2024年面試必問 20 道 Redis面試題(三)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 20 道 Redis面試題&#xff08;二&#xff09;-CSDN博客 五、Redis的持久化機制是什么&#xff1f;各自的優缺點&#xff1f; Redis的持久化機制主要有三種&#xff1a;RDB持久化、AOF持久化以及混合持久化。下面…

Android 13 QSSI和TARGET編譯時間不一致導致recovery升級失敗

環境 $ cat /etc/os-release NAME"Ubuntu" VERSION"20.04.4 LTS (Focal Fossa)" IDubuntu ID_LIKEdebian PRETTY_NAME"Ubuntu 20.04.4 LTS" VERSION_ID"20.04" HOME_URL"https://www.ubuntu.com/" SUPPORT_URL"https:/…

寡姐不高興了:這次可能會讓 OpenAI 遇到真正的麻煩|TodayAI

寡姐這次真不高興了 演員斯嘉麗約翰遜&#xff08;Scarlett Johansson&#xff09;近日表示&#xff0c;她拒絕了 OpenAI 的邀請&#xff0c;不愿為對話式 ChatGPT 系統配音&#xff0c;卻發現公司仍然使用了一個聽起來非常像她的聲音。對此&#xff0c;她感到“震驚”和“憤怒…

react狀態管理

狀態管理的實現 組件之外&#xff0c;可以在全局共享狀態/數據 closure&#xff08;閉包&#xff09; 可以解決 有修改這個數據的明確方法&#xff0c;并且&#xff0c;能夠讓其他的方法感知到。 本質上&#xff0c;就是把監聽函數放在一個地方&#xff0c;必要時拿出來執行一…

Java數據結構與算法(最小棧)

前言 設計一個支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂部的元素。i…