Question

Nous savons que lorsque vous invoquez #.stop() sur un AudioBufferNode, vous ne pouvez alors pas #.start().Pourquoi ce comportement est-il ainsi ?

Ce problème est survenu en jouant avec l'API WebAudio, comme nous le découvrons tous tôt ou tard en essayant d'implémenter la fonctionnalité de pause.Ce qui a piqué mon intérêt, c'est que, bien sûr, je comprends qu'il s'agit d'un flux et que vous ne pouvez pas simplement « mettre en pause » un flux.Mais pourquoi est-il détruit ?En interne, n'y a-t-il pas un pointeur vers les données, ou les données sont-elles simplement poussées vers la destination et oubliées par le tampon ?

Était-ce utile?

La solution

Vous n'appelez pas .stop() sur un AudioBuffer, vous appelez .stop() sur un BufferSourceNode - l'AudioBuffer peut être utilisé plusieurs fois.

La version courte est qu'il s'agit d'une optimisation qui permet de lire et d'oublier les tampons de manière très légère - vous pouvez créer un lecteur multimédia de niveau supérieur autour de lui, mais en soi, les BufferSourceNodes sont très légers.Les données sonores elles-mêmes ne sont pas oubliées et peuvent être réutilisées - en fait, utilisées simultanément par d'autres BufferSourceNodes - car elles se trouvent dans l'objet AudioBuffer séparé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top