当前位置: 首页 > article >正文

每天总结一个html标签——Audio音频标签

Audio标签

文章目录

  • Audio标签
    • 一、audio标签的定义与介绍
      • 1. 定义介绍
      • 2. 语法
      • 3. 支持的格式
      • 4.文本提示
    • 二、audio标签的HTML属性
      • 1. autoplay
      • 2. loop
      • 3. muted
      • 4. preload
    • 三、audio标签的常用DOM属性
    • 四、audio标签的常用事件
    • 四、默认样式
    • 五、自定义样式
      • 1. 示例
      • 2. 代码
    • 六、播放 m3u8音频
    • 七、其他用于播放音频的外部库

一、audio标签的定义与介绍

1. 定义介绍

<audio> 标签是 HTML5 中的一个新元素,它允许开发者直接在 HTML 文档中嵌入音频文件,用户无需安装额外的插件即可播放音频。这一特性大大提升了用户体验,同时也简化了开发者的工作流程。通过 <audio> 标签,我们可以轻松地控制音频的播放、暂停、音量等功能,并且可以支持多种音频格式。

2. 语法

<audio> 标签的基本语法非常简单,以下是一个最基本的示例:

<audio src="sample-15s.mp3" controls></audio>

在这个示例中,src 属性指定了音频文件的路径,这里的 sample-15s.mp3 是音频文件的名称。controls 属性是一个布尔属性,当添加该属性时,浏览器会显示一个默认的音频控制界面,用户可以通过这个界面来控制音频的播放、暂停、音量等操作。

除了基本的 srccontrols 属性外,<audio> 标签还支持多个其他属性,例如 autoplayloopmuted 等。下面是一个包含多个属性的示例:

<audio src="sample-15s.mp3" controls autoplay loop muted></audio>

在这个示例中,autoplay 属性表示音频会在页面加载完成后自动播放;loop 属性表示音频会循环播放;muted 属性表示音频会静音播放。

3. 支持的格式

不同的浏览器对音频格式的支持情况有所不同。为了确保音频能够在大多数浏览器中正常播放,我们通常需要提供多种格式的音频文件。<audio> 标签支持的常见音频格式有 MP3、WAV 和 Ogg。

  • MP3:这是一种广泛使用的音频压缩格式,具有较高的压缩比和较好的音质,几乎所有的浏览器都支持 MP3 格式。
  • WAV:这是一种无损音频格式,音质非常好,但文件体积较大,主要用于专业音频处理和一些对音质要求较高的场景。
  • Ogg:这是一种开放的音频压缩格式,具有较好的压缩比和音质,并且在一些开源浏览器中得到了广泛的支持。

为了兼容不同的浏览器,我们可以在 <audio> 标签中使用多个 <source> 标签来指定不同格式的音频文件,示例如下:

<audio controls><source src="sample-15s.mp3" type="audio/mpeg"><source src="sample-15s.ogg" type="audio/ogg"><source src="sample-15s.wav" type="audio/wav">您的浏览器不支持音频播放。
</audio>

在这个示例中,浏览器会按照 <source> 标签的顺序依次尝试加载音频文件,如果第一个文件无法加载,则会尝试加载第二个文件,以此类推。如果所有的文件都无法加载,则会显示 <audio> 标签内的文本信息。

4.文本提示

<audio> 标签中,我们可以添加一些文本提示信息,当浏览器不支持音频播放时,这些信息会显示给用户。例如:

<audio controls><source src="sample-15s.mp3" type="audio/mpeg">您的浏览器不支持音频播放,请升级您的浏览器或安装相关插件。
</audio>

这样,当用户使用的浏览器不支持音频播放时,就会看到相应的提示信息。

二、audio标签的HTML属性

1. autoplay

autoplay 是一个布尔属性,当添加该属性时,音频会在页面加载完成后自动播放。需要注意的是,由于用户体验和流量消耗的问题,一些浏览器会对自动播放功能进行限制,例如 Chrome 浏览器会在用户与页面进行交互之前禁止自动播放音频和视频。示例如下:

<audio src="sample-15s.mp3" autoplay></audio>

2. loop

loop 也是一个布尔属性,当添加该属性时,音频会在播放结束后自动重新开始播放,实现循环播放的效果。示例如下:

<audio src="sample-15s.mp3" loop></audio>

3. muted

muted 属性用于将音频静音。当添加该属性时,音频会在播放时静音,但用户仍然可以通过控制界面调整音量。示例如下:

<audio src="sample-15s.mp3" muted></audio>

4. preload

preload 属性用于控制浏览器如何预加载音频文件。它有三个可选值:

  • none:表示浏览器不会预加载音频文件。
  • metadata:表示浏览器会预加载音频的元数据,如音频的时长、比特率等。
  • auto:表示浏览器会尽可能地预加载整个音频文件。
    示例如下:
<audio src="sample-15s.mp3" preload="metadata"></audio>

三、audio标签的常用DOM属性

DOM 属性解释
currentTime获取或设置音频的当前播放位置(以秒为单位)。
duration获取音频的总时长(以秒为单位),如果音频不可用则返回 NaN
paused返回一个布尔值,表示音频是否处于暂停状态。
ended返回一个布尔值,表示音频是否已经播放结束。
muted获取或设置音频是否静音。
volume获取或设置音频的音量,取值范围从 0.0(静音)到 1.0(最大音量)。
playbackRate获取或设置音频的播放速度,1.0 为正常速度。
buffered返回一个 TimeRanges 对象,包含音频已缓冲的时间范围。
seeking返回一个布尔值,表示浏览器是否正在尝试跳转到新的播放位置。

四、audio标签的常用事件

完整事件请参考:

  • MDN-https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement
  • 菜鸟教程-https://www.runoob.com/tags/ref-av-dom.html
事件名称触发条件用途示例
canplay音频文件可以播放时可在此时执行一些初始化操作,如显示播放按钮等
play音频开始播放时可用于记录播放开始时间、更新播放状态等
pause音频暂停时可用于暂停相关的业务逻辑,如暂停动画等
ended音频播放结束时可用于实现自动播放下一首音频等功能
timeupdate音频的播放位置发生变化时可用于显示当前播放时间、更新进度条等

四、默认样式

浏览器会为 <audio> 标签提供一个默认的控制界面,这个界面的样式会因浏览器的不同而有所差异。默认的控制界面通常包含播放/暂停按钮、进度条、音量控制等元素。

  • 默认控制界面的display是inline
  • 可以设置宽高,边框等。
  • 不能设置音频播放器中的单个组件(如改变按钮大小、改变图标或字体等)
    在这里插入图片描述

五、自定义样式

要自定义 <audio> 标签的样式,我们可以通过 JavaScript 来创建自定义的控制界面,并使用 CSS 来对其进行样式设计。以下是一个简单的示例:

1. 示例

音频样式示例

2. 代码

<style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;background-color: #f4f4f9;}.audio-container {width: 600px;background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);padding: 25px;border-radius: 15px;display: flex;align-items: center;box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);}.control {width: 350px;height: 120px;display: flex;flex-direction: column;justify-content: space-around;align-items: center;}.btn-container {display: flex;align-items: center;}.play-pause-btn, .nav-btn {width: 45px;height: 45px;background-color: rgba(255, 255, 255, 0.1);border: 2px solid rgba(255, 255, 255, 0.5);border-radius: 50%;color: white;cursor: pointer;margin: 0 8px;transition: all 0.3s ease;backdrop-filter: blur(10px);}.play-pause-btn:hover, .nav-btn:hover {background-color: rgba(255, 255, 255, 0.2);transform: scale(1.05);}.progress-bar {width: 300px;height: 6px;background-color: rgba(255, 255, 255, 0.3);margin: 0 10px;border-radius: 3px;}.progress {height: 100%;background-color: white;width: 0%;border-radius: 3px;transition: width 0.1s linear;}.time-display, .cover {color: white;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}.time-display {margin: 0 10px;font-size: 14px;}.cover {width: 150px;height: 150px;background-color: rgba(255, 255, 255, 0.1);margin-left: auto;display: flex;align-items: center;justify-content: center;border-radius: 10px;border: 2px solid rgba(255, 255, 255, 0.5);backdrop-filter: blur(10px);font-size: 18px;}</style>
</head><body><div class="audio-container"><div class="control"><div class="btn-container"><button class="nav-btn" id="prevBtn">◀◀</button><button class="play-pause-btn" id="playPauseBtn"></button><button class="nav-btn" id="nextBtn">▶▶</button></div><div class="progress-bar"><div class="progress" id="progress"></div><div class="time-display" id="timeDisplay">00:00 / 00:00</div></div></div><div class="cover">歌曲封面</div></div><audio id="myAudio" src="sample-15s.mp3"></audio><script>const audio = document.getElementById('myAudio');const playPauseBtn = document.getElementById('playPauseBtn');const progress = document.getElementById('progress');const timeDisplay = document.getElementById('timeDisplay');const formatTime = (seconds) => {const minutes = Math.floor(seconds / 60);seconds = Math.floor(seconds % 60);return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;};audio.addEventListener('loadedmetadata', function () {timeDisplay.textContent = `00:00 / ${formatTime(audio.duration)}`;});playPauseBtn.addEventListener('click', function () {if (audio.paused) {audio.play();playPauseBtn.textContent = '⏸';} else {audio.pause();playPauseBtn.textContent = '▶';}});audio.addEventListener('timeupdate', function () {const progressPercent = (audio.currentTime / audio.duration) * 100;progress.style.width = `${progressPercent}%`;timeDisplay.textContent = `${formatTime(audio.currentTime)} / ${formatTime(audio.duration)}`;});</script>
</body>

在这个示例中,我们创建了一个自定义的音频控制界面,包括播放/暂停按钮和进度条。通过 JavaScript 监听音频的事件,我们可以实现对音频的控制,并更新进度条的状态。

六、播放 m3u8音频

M3U8 是一种基于 HTTP Live Streaming (HLS) 协议的音频和视频播放列表文件格式,常用于在线流媒体播放。要在网页中播放 M3U8 文件,我们可以使用一些第三方库,如 hls.js。以下是一个简单的示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>播放 M3U8 文件</title>
</head>
<body><audio id="myAudio" controls></audio><script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script><script>const audio = document.getElementById('myAudio');if (Hls.isSupported()) {const hls = new Hls();hls.loadSource('your-m3u8-file.m3u8');hls.attachMedia(audio);hls.on(Hls.Events.MANIFEST_PARSED, function() {audio.play();});} </script>
</body>
</html>

在这个示例中,我们引入了 hls.js 库,并使用它来加载和播放 M3U8 文件。如果浏览器支持 HLS 协议,我们会使用 hls.js 来处理;

七、其他用于播放音频的外部库

例如:plyr.js、howler.js、wavesurfer.js 等。这些库提供了更多的功能和自定义选项,使音频播放更加灵活和方便。

相关文章:

每天总结一个html标签——Audio音频标签

Audio标签 文章目录 Audio标签一、audio标签的定义与介绍1. 定义介绍2. 语法3. 支持的格式4.文本提示 二、audio标签的HTML属性1. autoplay2. loop3. muted4. preload 三、audio标签的常用DOM属性四、audio标签的常用事件四、默认样式五、自定义样式1. 示例2. 代码 六、播放 m3…...

使用 React Native 开发鸿蒙(HarmonyOS)运动健康类应用的系统化准备工作

⚙️ ​​一、环境与工具准备​​ ​​双环境搭建​​ ​​React Native 环境​​&#xff1a;安装 Node.js&#xff08;≥18.x&#xff09;、JDK&#xff08;≥11&#xff09;、Yarn。​​鸿蒙开发环境​​&#xff1a; 下载 DevEco Studio 4.0 及 HarmonyOS SDK&#xff1b;配…...

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲

web3-Remix部署智能合约到“荷兰式”拍卖及以太坊gas费机制细讲 一、使用Remix演示智能合约部署 智能合约的代码编写一般都是在Remix上&#xff0c;Remix的好处的话就是可以在浏览器中快速开发和部署合约&#xff0c;无需在本地安装任何程序&#xff0c;十分适合新手。 对应…...

网络编程及原理(一)

目录 一 . 独立模式与网络互联 二 . 局域网 —— LAN &#xff08;1&#xff09;基于网线直连 &#xff08;2&#xff09;基于集线器组建 &#xff08;3&#xff09;基于交换机组建 &#xff08;4&#xff09;基于交换机和路由器组建 三 . 广域网 —— WAN 四 …...

superior哥AI系列第9期:高效训练与部署:从实验室到生产环境

&#x1f680; superior哥AI系列第9期&#xff1a;高效训练与部署&#xff1a;从实验室到生产环境 嘿&#xff01;小伙伴们&#xff01;&#x1f44b; 欢迎来到superior哥AI系列第9期&#xff01;经过前面8期的学习&#xff0c;你已经掌握了深度学习的核心技术。但是&#xff0…...

【Linux】进程 信号保存 信号处理 OS用户态/内核态

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 一、信号保存 ✨进程如何完成对信号的保存&#xff1f; ✨在内核中的表示 ✨sigset_t ✨信号操作函数 &#x1fa84;sigprocmask --- 获取或设置当前进程的 block表 &#x1fa84;s…...

[ Qt ] | 与系统相关的操作(一):鼠标相关事件

目录 信号和事件的关系 (leaveEvent和enterEvent) 实现通过事件获取鼠标进入和鼠标离开 (mousePressEvent) 实现通过事件获得鼠标点击的位置 (mouseReleaseEvent) 前一个的基础上添加鼠标释放事件 (mouseDoubleClickEvent) 鼠标双击事件 鼠标移动事件 鼠标滚轮事件 …...

stm32使用hal库模拟spi模式3

因为网上模拟spi模拟的都是模式0&#xff0c;很少有模式3的。 模式3的时序图&#xff0c;在clk的下降沿切换电平状态&#xff0c;在上升沿采样&#xff0c; SCK空闲为高电平 初始化cs&#xff0c;clk&#xff0c;miso&#xff0c;mosi四个io。miso配置为输入&#xff0c;cs、c…...

安装 Nginx

个人博客地址&#xff1a;安装 Nginx | 一张假钞的真实世界 对于 Linux 平台&#xff0c;Nginx 安装包 可以从 nginx.org 下载。 Ubuntu: 版本Codename支持平台12.04precisex86_64, i38614.04trustyx86_64, i386, aarch64/arm6415.10wilyx86_64, i386 在 Debian/Ubuntu 系统…...

Vue-1-前端框架Vue基础入门之一

文章目录 1 Vue简介1.1 Vue的特性1.2 Vue的版本2 Vue的基础应用2.1 Vue3的下载2.2 Vue3的新语法2.3 vue-devtools调试工具3 Vue的指令3.1 内容渲染指令{{}}3.2 属性绑定指令v-bind3.3 事件绑定指令v-on3.4 双向绑定指令v-model3.5 条件渲染指令v-if3.6 列表渲染指令v-for4 参考…...

OurBMC技术委员会2025年二季度例会顺利召开

5月28日&#xff0c;OurBMC社区技术委员会二季度例会顺利召开。本次会议采用线上线下结合的方式&#xff0c;各委员在会上听取了OurBMC社区二季度工作总结汇报&#xff0c;规划了2025年三季度的重点工作。 会上&#xff0c;技术委员会主席李煜汇报了社区2025年二季度主要工作及…...

postman自动化测试

目录 一、相关知识 1.网络协议 2.接口测试 3.编写测试用例 4.系统架构 二、如何请求 1.get请求 ​编辑2.post请求 3.用环境变量请求 4.Postman测试沙箱 一、相关知识 1.网络协议 规定数据信息发送与解析的方式。 网络传输协议 https相比http&#xff0c;信息在网…...

力扣热题100之二叉树的直径

题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 代码 方法&#xff1a;递归 计算二叉树的直径可以理解…...

数字人技术的核心:AI与动作捕捉的双引擎驱动(210)

**摘要&#xff1a;**数字人技术从静态建模迈向动态交互&#xff0c;AI与动作捕捉技术的深度融合推动其智能化发展。尽管面临表情僵硬、动作脱节、交互机械等技术瓶颈&#xff0c;但通过多模态融合技术、轻量化动捕方案等创新&#xff0c;数字人正逐步实现自然交互与情感表达。…...

c++ 命名规则

目录 总结1. 类名&#xff08;Class Names&#xff09;2. 变量名&#xff08;Variable Names&#xff09;3. 函数名&#xff08;Function Names&#xff09;4. 宏定义&#xff08;Macros&#xff09;5. 命名空间&#xff08;Namespaces&#xff09;6. 枚举&#xff08;Enums&am…...

GRU 参数梯度推导与梯度消失分析

GRU 参数梯度推导与梯度消失分析 1. GRU 前向计算回顾 GRU 单元的核心计算步骤&#xff08;忽略偏置项&#xff09;&#xff1a; 更新门: z_t σ(W_z [h_{t-1}, x_t]) 重置门: r_t σ(W_r [h_{t-1}, x_t]) 候选状态: ̃h_t tanh(W_h [r_t ⊙ h_{t-1}, x_t]) 新…...

针对KG的神经符号集成综述 两篇

帖子最后有五篇综述的总结。 综述1 24年TKDD 系统性地概述了神经符号知识图谱推理领域的进展、技术和挑战。首先介绍了知识图谱&#xff08;KGs&#xff09;和符号逻辑的基本概念&#xff0c;知识图谱被视为表示、存储和有效管理知识的关键工具&#xff0c;它将现实世界的知识…...

RabbitMQ和MQTT区别与应用

RabbitMQ与MQTT深度解析&#xff1a;协议、代理、差异与应用场景 I. 引言 消息队列与物联网通信的重要性 在现代分布式系统和物联网&#xff08;IoT&#xff09;生态中&#xff0c;高效、可靠的通信机制是构建稳健、可扩展应用的核心。消息队列&#xff08;Message Queues&am…...

Vue跨层级通信

下面,我们来系统的梳理关于 Vue跨层级通信 的基本知识点: 一、跨层级通信核心概念 1.1 什么是跨层级通信 跨层级通信是指在组件树中,祖先组件与后代组件(非直接父子关系)之间的数据传递和交互方式。这种通信模式避免了通过中间组件层层传递 props 的繁琐过程。 1.2 适用…...

docker常见命令行用法

&#x1f9e8; 一、关闭和清理 Docker 服务相关命令 &#x1f53b; docker-compose down 作用&#xff1a;关闭并删除所有使用当前 docker-compose.yml 启动的容器、网络、挂载卷&#xff08;匿名的&#xff09;、和依赖关系。 通俗解释&#xff1a;就像你关掉了一个 App&am…...

Axure设计案例:滑动拼图解锁

设计以直观易懂的操作方式为核心&#xff0c;只需通过简单的滑动动作&#xff0c;将拼图块精准移动至指定位置&#xff0c;即可完成解锁。这种操作模式既符合用户的日常操作习惯&#xff0c;在视觉呈现上&#xff0c;我们精心设计拼图图案&#xff0c;融入生动有趣的元素&#…...

MySQL权限详解

在MySQL中&#xff0c;权限管理是保障数据安全和合理使用的重要手段。MySQL提供了丰富的权限控制机制&#xff0c;允许管理员对不同用户授予不同级别的操作权限。本文将会对MySQL中的权限管理&#xff0c;以及内核如何实现权限控制进行介绍。 一、权限级别 MySQL 的权限是分层…...

基于BP神经网络的语音特征信号分类

基于BP神经网络的语音特征信号分类的MATLAB实现步骤&#xff1a; 1. 数据预处理 信号采样&#xff1a;读取语音信号并进行采样&#xff0c;确保信号具有统一的采样率。例如&#xff1a; [y, Fs] audioread(audio_file.wav); % 读取音频文件预加重&#xff1a;增强高频信号&am…...

解决fastadmin、uniapp打包上线H5项目路由冲突问题

FastAdmin 基于 ThinkPHP&#xff0c;默认采用 URL 路由模式&#xff08;如 /index.php/module/controller/action&#xff09;&#xff0c;且前端资源通常部署在公共目录&#xff08;如 public/&#xff09;下。Uniapp 的历史模式需要将所有前端路由请求重定向到 index.html&a…...

web3-区块链的交互性以及编程的角度看待智能合约

web3-区块链的交互性以及编程的角度看待智能合约 跨链交互性 交互性 用户在某一区块链生态上拥有的资产和储备 ​ 目标&#xff1a;使用户能够把资产和储备移动到另一个区块链生态上 可组合性 使在某一区块链的DAPP能调用另一个区块链上的DAPP 如果全世界都在用以太坊就…...

数据结构(7)—— 二叉树(1)

目录 前言 一、 树概念及结构 1.1树的概念 1.2树的相关概念 1.3数的表示 1.二叉树表示 2.孩子兄弟表示法 3.动态数组存储 1.4树的实际应用 二、二叉树概念及结构 2.1概念 2.2特殊的二叉树 1.满二叉树 2. 完全二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.顺序存储 2.链式存储…...

ROS1和ROS2的区别autoware.ai和autoware.universe的区别

文章目录 前言一、ROS1和ROS2的区别一、ROS2通讯实时性比ROS1强二、ROS1官方不再维护了三、ROS2的可靠性比ros1强四、ROS2的安全性比ros1强五、ROS2资源占用低六、等等等等 二、autoware.ai和autoware.universe的区别一、autoware.ai不维护了二、autoware.universe功能多&#…...

如何使用 Docker 部署grafana和loki收集vllm日志?

环境: Ubuntu20.04 grafana loki 3.4.1 问题描述: 如何使用 Docker 部署grafana和loki收集vllm日志? 解决方案: 1.创建一个名为 loki 的目录。将 loki 设为当前工作目录: mkdir loki cd loki2.将以下命令复制并粘贴到您的命令行中,以将 loki-local-config.yaml …...

Kafka入门- 基础命令操作指南

基础命令 主题 参数含义–bootstrap-server连接的Broker主机名称以及端口号–topic操作的topic–create创建主题–delete删除主题–alter修改主题–list查看所有主题–describe查看主题的详细描述–partitions设置分区数–replication-factor设置分区副本–config更新系统默认…...

目标检测我来惹1 R-CNN

目标检测算法&#xff1a; 识别图像中有哪些物体和位置 目标检测算法原理&#xff1a; 记住算法的识别流程、解决问题用到的关键技术 目标检测算法分类&#xff1a; 两阶段&#xff1a;先区域推荐ROI&#xff0c;再目标分类 region proposalCNN提取分类的目标检测框架 RC…...