Three.js 音频
Threejs 音频相关的 API 音频 Audio
、位置音频 PositionalAudio
、监听者 AudioListener
、音频分析器 AudioAnalyser
、音频加载器 AudioLoader
。关于这些API的具体介绍可以参考 Three.js 官方文档。
音频 Audio
、位置音频 PositionalAudio
等Threejs类本质上是对原生 Web Audio API 的封装。
关于 Three.js 音频相关的具体讲解和案例源码可以参考本站发布的Three.js视频教程第13章音频模块。
非位置音频 THREE.Audio
下面的代码案例是通过非位置音频 THREE.Audio
加载一段音频进行进行播放,该音频播放效果不受具体位置影响,一般可以用于一个三维场景的背景音乐。
// 非位置音频可用于不考虑位置的背景音乐
// 创建一个监听者
var listener = new THREE.AudioListener();
// camera.add( listener );
// 创建一个非位置音频对象 用来控制播放
var audio = new THREE.Audio(listener);
// 创建一个音频加载器对象
var audioLoader = new THREE.AudioLoader();
// 加载音频文件,返回一个音频缓冲区对象作为回调函数参数
audioLoader.load('中国人.mp3', function(AudioBuffer) {
// console.log(AudioBuffer)
// 音频缓冲区对象关联到音频对象audio
audio.setBuffer(AudioBuffer);
audio.setLoop(true); //是否循环
audio.setVolume(0.5); //音量
// 播放缓冲区中的音频数据
audio.play(); //play播放、stop停止、pause暂停
});
位置音频 THREE.PositionalAudio
在实际生活中,听到声音的效果,受音源相对监听者的位置和角度影响。音频源位置发生变化,听到的声音有所变化,比如音量大小。Threejs提供了一个和非位置音频 THREE.Audio
不同的API位置音频 THREE.PositionalAudio
,通过位置音频 THREE.PositionalAudio
创建的音频播放效果可以模仿自然界中,人听到不同位置音源的声音效果。
可以下载 Threejs 视频教程 13.1 节源码(0.位置音频PositionalAudio.html)体验测试,通过鼠标左键拖动旋转整个场景,可以体验到音频播放效果随着鼠标左键变化而变化。因为监听者AudioListener
绑定到了相机对象camera
上,所以通过OrbitControls.js改变相机的位置或角度本质上就是改变监听者的位置或角度,这样的话就相当于音源绑定的网格模型audioMesh
相对监听者的位置或角度发生了变化。
...
// 用来定位音源的网格模型
var audioMesh = new THREE.Mesh(geometry, material);
// 设置网格模型的位置,相当于设置音源的位置
audioMesh.position.set(0, 0, 300);
scene.add(audioMesh);
...
// 创建一个虚拟的监听者
var listener = new THREE.AudioListener();
// 监听者绑定到相机对象
camera.add(listener);
// 创建一个位置音频对象,监听者作为参数,音频和监听者关联。
var PosAudio = new THREE.PositionalAudio(listener);
//音源绑定到一个网格模型上
audioMesh.add(PosAudio);
// 创建一个音频加载器
var audioLoader = new THREE.AudioLoader();
// 加载音频文件,返回一个音频缓冲区对象作为回调函数参数
audioLoader.load('./中国人.mp3', function(AudioBuffer) {
// console.log(buffer);
// 音频缓冲区对象关联到音频对象audio
PosAudio.setBuffer(AudioBuffer);
PosAudio.setVolume(0.9); //音量
PosAudio.setRefDistance(200); //参数值越大,声音越大
PosAudio.play(); //播放
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论