Coder Social home page Coder Social logo

Comments (4)

surikov avatar surikov commented on June 4, 2024

Browser manufacturers force background pages to reduce resource consumption.
This is the rule for all browsers.
I don't want to fight browser makers.

from webaudiofont.

alfedukovich avatar alfedukovich commented on June 4, 2024

Use setTimeout or setInterval to queue ahead until the queue finishes playing. Then playback won't stop when you switch tabs.
code
code

from webaudiofont.

page200 avatar page200 commented on June 4, 2024

Thank you, that example indeed works and uses setInterval, and the variant with setTimeout works as well. setInterval or setTimeout seem nice for auto-repeating the song for an unlimited number of times.

On the other hand, for each playthrough of a song, I wonder whether anything speaks against simply setting stepDuration to the song duration, i.e. queueing the entire song via queueWaveTable() at once. The notes are then scheduled here via the start() method of an AudioBufferSourceNode, so the browser makers decide what to do with that, and we're not fighting them. (For now. :))

from webaudiofont.

page200 avatar page200 commented on June 4, 2024

Setting a long stepDuration works in Firefox and for some MIDI files in Chrome. For other MIDI files in Chrome, the audio stops after a second. Maybe Chrome is stupid in that it focuses on computing something too early for future sounds instead of playing imminent sounds as intended (like Firefox does).

Instead of a long stepDuration, what seems to work is to call each step with window.setTimeout instead of window.requestAnimationFrame. Both are unnecessarily resource-intensive except if setTimeout takes into account when the next note will actually play instead of getting called every 10 milliseconds.

from webaudiofont.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.