🎧 audio-visualization-toolkit
Lightweight and customizable audio visualization toolkit build up on web audio api.
A thin wrapper of Audio Element and Web Audio API.
It currently uses canvas2D as the graphic engine, I will implement the ability to use Three.js later.
Demo: https://eggtronic.github.io/web-audio-visualization-tool/
✨ Features
- 🌈 Customizable - provides lifecycle hooks for audio visualization and interaction.
- 🛡 Modularity - use imagination to create your own audio visualization or audio player.
- 📦 Lightweight - only few lines of code.
- 🎨 Ready to go - there are some ready to use hooks implemented for you.
✨ Useful Libraries
- 🌈 web-audio-beat-detector - use it to detect BPM of the audio
🖥 Environment Support
- Currently only support the latest browsers such as Chrome, but will implement the support for more browers in the future.
Firefox | Chrome |
---|
latest versions | latest versions |
🔨 Development
- Run
npm install
- Run
npm run build
to build - Run
npm run dev
for development
✨ Basic Usage
-
You can install it from npm (unstable)
`npm install --save audio-visualization-tool`
You can also get it from cdn in script tag
<script src='https://cdn.jsdelivr.net/npm/audio-visualization-tool@0.0.1/lib/index.js'></script>
-
In your html body you need create 2 canvas element and 1 audio element.
<audio id="myAudio" src="..." data-author="..." data-title="..."></audio>
<canvas id="myCanvas" width="800" height="400"></canvas>
<canvas id="myStaticCanvas" width="800" height="400"></canvas>
<script src='https://cdn.jsdelivr.net/npm/audio-visualization-tool@0.0.1/lib/index.js'></script>
<script type="module" src='example.js'></script>
- Create an example.js file and copy the js code below into it. (you can also use your own name)
- You will need to reference 2 canvas element id and 1 audio element id to init the AudioVisualizer.
- (optional) You can reference your own canvases.
- You can reuse my example style for a better preview (it's in the index.html)
window.addEventListener('DOMContentLoaded', () => {
'use strict';
const AudioVisualizer = AudioVisualizeTool.AudioVisualizer;
const {
Ripple
} = AudioVisualizeTool.defaultElements;
const {
renderTime,
renderInfo,
renderLoading,
clearLoading,
renderBackgroundImg,
renderLounge,
renderProgressbar,
renderProgressbarShadow,
renderSeekBar,
renderSeekBarShadow,
bindSeekBarEvent,
renderPlayControl,
bindPlayControlEvent,
renderVolumeBar,
bindVolumeBarEvent
} = AudioVisualizeTool.defaultRenderHooks;
const {
setCanvasStyle,
setStaticCanvasStyle
} = AudioVisualizeTool.defaultInitHooks;
let ripple = new Ripple();
let audioVisualizer = new AudioVisualizer({
autoplay: false,
loop: true,
initVolume: 0.5,
fftSize: 512,
framesPerSecond: 60,
audio: 'myAudio',
audioURLs: ['./static/reverie.mp3'],
canvas: 'myCanvas',
canvasStatic: 'myStaticCanvas',
customCanvases: [],
theme: {
barWidth: 2,
barHeight: 5,
barSpacing: 7,
barColor: '#ffffff',
shadowBlur: 20,
shadowColor: '#ffffff',
font: ['12px', 'Helvetica'],
},
beforeInitHook: [],
afterInitHook: [setCanvasStyle, setStaticCanvasStyle],
beforeLoadAudioHook: [renderLoading],
afterLoadAudioHook: [clearLoading, renderPlayControl],
beforeStartHook: [],
afterStartHook: [],
beforePauseHook: [],
afterPauseHook: [renderProgressbar, renderTime, renderSeekBar, renderPlayControl],
beforeResumeHook: [],
afterResumeHook: [],
onVolumeChangeHook: [renderVolumeBar],
beforeStaticHook: [renderBackgroundImg],
onStaticHook: [renderProgressbarShadow, renderInfo, renderSeekBarShadow, renderVolumeBar],
onFrameHook: [renderLounge, renderProgressbar, renderTime, renderSeekBar, ripple.render()],
onEventHook: [bindPlayControlEvent, bindSeekBarEvent, bindVolumeBarEvent],
onEndHook: [],
})
audioVisualizer.init();
}, false);
🔨 Create Your Own Audio Visualization
editing...
🤝 Contributing
I haven't specified an contributing guide, but I welcome all contributions.
If you have any questions or ideas just email me.
📝 Here is my todo list (** means on going)