Audio Web pour visualiser et interagir avec les formes d'onde
Comment puis-je écrire un programme JavaScript pour afficher une forme d'onde d'un fichier audio? Je veux utiliser le Web de l'Audio et de la Toile.
J'ai essayé ce code:
(new window.AudioContext).decodeAudioData(audioFile, function (data) {
var channel = data.getChannelData(0);
for (var i = 0; i < channel; i++) {
canvas.getContext('2d').fillRect(i, 1, 40 - channel[i], 40);
}
});
Mais le résultat est loin de ce que je veux (à savoir, l'image n'est pas lisse, depuis que je suis de dessin avec des rectangles). Je veux un look lisse comme cette image:
Tous les conseils sur la façon de mettre en œuvre la forme d'onde?
- C'est peut-être un point de départ: storiesinflight.com/jsfft/visualizer/index.html
- il sonne un lointain démo de bell.
- C'est sur sujet dans la rubrique: softwarerecs.stackexchange.com
Vous devez vous connecter pour publier un commentaire.
Vous pouvez être intéressé par AudioJedit. C'est un projet open source hébergé sur GitHub. Il ont un petit côté serveur node.js script pour le chargement des fichiers audio, mais toutes les interactions avec l'audio mis en œuvre en JavaScript côté client. Je pense que c'est similaire à ce que vous recherchez.
RealtimeAnalyserNode
. Merci beaucoup!Lancé ma propre bibliothèque, après tout: wavesurfer.js.
Il dessine une forme d'onde à partir des données PCM et cherche régions de l'audio en cliquant sur elle.
Pour un (espérons) simple d'utilisation et l'intégration d'une forme d'onde avec votre application, vous pouvez vouloir vérifier ce que nous faisons à l'IRCAM, spécialement la forme d'onde-vis, dans ce cas particulier.
Tout est open source et qui visent pour la modularité (travaux en cours)
Vous pouvez trouver un démo ici
Et le correspondant githug référentiel
Rendre votre code est extrêmement inefficace, parce que cela va rendre 44100 pixels pour chaque seconde de l'audio. Vous voulez de préférence rendre à la plupart de la fenêtre d'affichage de la largeur avec un ensemble de données réduit.
La par pixel marge d'échantillon nécessaires pour s'adapter à la forme d'onde dans la fenêtre d'affichage peut être calculé avec audioDurationSeconds * taux d'échantillonnage /viewPortWidthPx. Donc, pour une fenêtre de 1000px et un fichier audio de 2 secondes à la fréquence d'échantillonnage de 44100 échantillons par pixel = (2 * 44100) /1000 = ~88.
Pour chaque pixel de l'écran vous prendre les valeurs min et max à partir de cet échantillon de la gamme, vous utilisez ces données pour dessiner la forme d'onde.
Voici un exemple d'algorithme qui fait cela, mais permet de donner les échantillons par pixel comme argument ainsi que la position de défilement pour permettre virtuel de défilement et de zoom. Il comprend un paramètre de résolution, vous pouvez tweak pour la performance, indique le nombre d'échantillons, il doit prendre par pixel exemple de la gamme:
Dessin zoomable forme d'onde audio montage en Javascript
La méthode de tirage, il est semblable à la vôtre, afin de la lisser, vous devez utiliser lineTo au lieu de fillRect.Cette différence ne devrait pas être énorme, je pense que vous avez peut-être oublier de définir les attributs width et height sur la toile. La définition de cette css causes flou de dessin, vous devez définir les attributs.