html播放本地音乐

本地有多个音乐文件,想用 html 逐个播放,或循环播放,并设置初始音量。

audio

在 html 中播放音乐文件用 audio 标签:

  • controls 启用控制按钮,如进度条、播放、音量、速度等。不加不显示任何 widget。
  • autoplay 理应启用自动播放,但浏览器似乎禁止自动播放,故目前没什么用。
  • muted 静音。
html 复制代码
<!DOCTYPE html>
<html>
<body>

<audio controls autoplay>
	<source src="C:/Users/tom/Music/Wonderful U - 张含韵.mp3" type="audio/mpeg">
	Failed.
</audio>

<br/>

<audio controls muted>
	<source src="C:/Users/tom/Music/Sacred Play Secret Place - Matryoshka.m4a" type="audio/x-m4a">
	Failed.
</audio>

</body>
</html>

Set Volume Automatically

想在打开 html 文件时,自动设置某个音量,如 20%,而不是默认的最大声、或 muted 静音。用到 javascript:

  • class 标记需要调音量的 audio;
  • script 内用 javascript 选中这些 audio,并设置其音量。
html 复制代码
<!DOCTYPE html>
<body>
<!-- 用 `a` 标记需要自动校音量的 audio -->
<audio class="a" controls>
	<source src="C:/Users/tom/Music/Wonderful U - 张含韵.mp3" type="audio/mpeg">
	Failed.
</audio>
<br/>
<audio class="a" controls>
	<source src="C:/Users/tom/Music/Sacred Play Secret Place - Matryoshka.m4a" type="audio/x-m4a">
	Failed.
</audio>


<script>
	// 添加事件:加载时自动执行
	document.addEventListener("DOMContentLoaded", function() {
		var audioPlayers = document.querySelectorAll('.a'); // 根据 `a` 选 audio 元素
		audioPlayers.forEach(function(player) {
			player.volume = 0.2; // set initial volume
		});
	});
</script>
</body>
</html>

Play a List

有多个音乐文件,想顺序或循环播放它们,同样用 javascript 函数控制。

  • 浏览器可能禁止未有交互就自动播放,故一开头要手动点播放,但后面可连播。
html 复制代码
<!DOCTYPE html>
<body>
<!-- 放一个空 audio 元素 -->
<audio id="auto-audio" controls autoplay></audio>

<script>
	const path = 'C:/Users/tom/Music/'; // 音乐文件都在这个目录下
	const playlist = [
		'嗵嗵 - DOUDOU.mp3',
		'我拿什么留住你 - FloruitShow 福禄寿.mp3',
		'琢磨 - 许靖韵.mp3'
	];

	let currentTrack = 0; // 目前播放的文件下标
	const audioPlayer = document.getElementById('auto-audio');

	// 播放函数
	function playTrack(index) {
		audioPlayer.src = path + playlist[index]; // 完整路径
		audioPlayer.volume = 0.2; // 校音量
		audioPlayer.play().catch(error => {
			console.log("%cAutoplay prevented:", "color: red;", error);
		});
	}

	// 加载时执行
	document.addEventListener("DOMContentLoaded", function() {
		// 播放第一首(可能被浏览器阻止自动播放而失败)
		playTrack(currentTrack);
		// 添加事件:播放结束后自动放下一首
		audioPlayer.addEventListener('ended', function () {
			// 顺序播放
			if (currentTrack < playlist.length) {
                playTrack(currentTrack);
            }
            // 循环播放
			// currentTrack = (currentTrack + 1) % playlist.length;
			// playTrack(currentTrack);
		});
	});
</script>
</body>
</html>

References

  1. html用css grid实现自适应四宫格放视频
相关推荐
jump68015 分钟前
url输入到网页展示会发生什么?
前端
诸葛韩信19 分钟前
我们需要了解的Web Workers
前端
brzhang24 分钟前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu43 分钟前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花1 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋1 小时前
场景模拟:基础路由配置
前端
六月的可乐1 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程
一 乐1 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习
BBB努力学习程序设计2 小时前
CSS Sprite技术:用“雪碧图”提升网站性能的魔法
前端·html
Zyx20072 小时前
深拷贝:JavaScript 中对象复制的终极解法
javascript