¿Por qué el método stop en AudioBufferNode lo destruye?
-
21-12-2019 - |
Pregunta
Sabemos que cuando invocas #.stop()
en un AudioBufferNode, entonces no puedes #.start()
.¿Por qué el comportamiento es así?
Este problema surgió al jugar con la API de WebAudio, como todos descubrimos tarde o temprano al intentar implementar la funcionalidad de pausa.Lo que despertó mi interés fue, claro, que entiendo que es una transmisión y que no se puede simplemente "pausar" una transmisión.¿Pero por qué se destruye?Internamente, ¿no hay un puntero a los datos, o los datos simplemente son enviados al destino y el búfer los olvida?
Solución
No estás llamando a .stop() en un AudioBuffer, estás llamando a .stop() en un BufferSourceNode; el AudioBuffer se puede usar varias veces.
La versión corta es una optimización que permite activar y olvidar la reproducción de buffers de una manera muy liviana: puede crear un reproductor multimedia de nivel superior a su alrededor, pero en sí mismos los BufferSourceNodes son muy livianos.Los datos de sonido en sí no se olvidan y pueden reutilizarse (de hecho, pueden usarse simultáneamente por otros BufferSourceNodes) porque están en el objeto AudioBuffer separado.