Преглед на файлове

fix(Playback): Fix playback crackling / cutting out in complex samples by disabling unnecessary part of memory leak fix (needs npm run prebuild)

run npm run prebuild to make this commit take effect (copies the changed files to node_modules/)

see:
https://github.com/opensheetmusicdisplay/osmd-extended/issues/78
https://github.com/opensheetmusicdisplay/osmd-extended/issues/93

also fixes playback sometimes taking slightly longer for pieces with extremely fast notes:
https://github.com/opensheetmusicdisplay/osmd-extended/issues/106
sschmidTU преди 1 година
родител
ревизия
e67e1ab76b
променени са 2 файла, в които са добавени 23 реда и са изтрити 11 реда
  1. 5 0
      src/SamplePlayerPatch/lib/events.js
  2. 18 11
      src/SamplePlayerPatch/lib/player.js

+ 5 - 0
src/SamplePlayerPatch/lib/events.js

@@ -14,11 +14,16 @@ module.exports = function (player) {
   player.on = function (event, cb) {
     if (arguments.length === 1 && typeof event === 'function') return player.on('event', event)
     var prop = 'on' + event
+    // --- original soundfontplayer code ---
+    // var old = player[prop]
+    // player[prop] = old ? chain(old, cb) : cb
+    // --- patch ---
     if (player[prop]) {
       player[prop].push(cb)
     } else {
       player[prop] = [cb]
     }
+    // --- end patch ---
     return player
   }
   return player

+ 18 - 11
src/SamplePlayerPatch/lib/player.js

@@ -80,17 +80,24 @@ function SamplePlayer (ac, source, options) {
     var opts = options || EMPTY
     when = Math.max(ac.currentTime, when || 0)
     player.emit('start', when, name, opts)
-    // cache
-    var node
-    for (var iterator in tracked) {
-      if (buffer === tracked[iterator].source.buffer && tracked[iterator].startTime + buffer.duration < when) {
-        node = resetNode(tracked[iterator], buffer, opts)
-      }
-    }
-    if (!node) {
-      node = createNode(name, buffer, opts)
-      node.id = track(name, node)
-    }
+    // --- original soundfontplayer code ---
+    var node = createNode(name, buffer, opts)
+    node.id = track(name, node)
+    // --- patch (?) (memory leak) ---
+    // "patch" from 2022-09 for memory leak, seems to cause audio stutter for some samples,
+    //   and disabling this doesn't seem to cause leaks.
+    // // cache
+    // var node
+    // for (var iterator in tracked) {
+    //   if (buffer === tracked[iterator].source.buffer && tracked[iterator].startTime + buffer.duration < when) {
+    //     node = resetNode(tracked[iterator], buffer, opts)
+    //   }
+    // }
+    // if (!node) {
+    //   node = createNode(name, buffer, opts)
+    //   node.id = track(name, node)
+    // }
+    // --- end patch ---
     node.env.start(when)
     node.source.start(when)
     player.emit('started', when, node.id, node)