Можно не заморачиваться с низким уровнем, использовать
<audio>
и
createAnalyser
Демо:
https://codepen.io/anon/pen/zZqqrW (пришлось подправить чуток)
Оригинал (не работающий):
https://codepen.io/AfroDev/pen/MYOrvP
В сети десятки визуализаторов, если что.